硬盘分为机械硬盘,固态硬盘;

    机械硬盘:由磁头读取旋转的磁盘取得数据

1333013035_4784.jpg

    track:磁道

    sector:扇区,512bytes

    cylinder:柱面

    分区划分基于柱面:

    平均寻道时间:5400rpm, 7200rpm, 10000rpm, 15000rpm


    固态硬盘:

        wKiom1bjheeQE5xuAADBdKVbhcA589.jpg

     简单原理

    NAND闪存(NAND Flash):一种非易失性闪存。

    NAND目前大致分为3类:SLC,MLC,TLC

    wKiom1bjiZ6DmwG5AAAJQTbqNws995.png

    SLC 2种状态,可以表示1bits数据

    MLC 4种状态,可以表示2bits数据

    TLC 8种状态,可以表示3bits数据

    NAND Flash Memory写入单位为page(一般为4KB),而抹除单位为Block。所以每个单位内能写入数据越多,显示的可使用容量越大。

                wKioL1bjpJTiYqEZAAABT8QgZ0k999.png

                                                                                                                绿色为page,整体为Block

            wKiom1bjpVCD6-S-AAA1cyNYVaU715.png

wKiom1bjplDDTin8AAGCg6nxrwc070.png

        SSD内部维护了一张映射表,用于管理写入的数据。


    设备类型:根据Linux一切皆文件的哲学思想

        块(block):随机访问,数据交换单位是“块”;

        字符(character):线性访问,数据交换单位是“字符”;

    设备文件:FHS

        /dev设备文件:关联至设备的驱动程序;设备的访问入口;

    设备号:

        major:主设备号,区分设备类型;用于标明设备所需要的驱动程序

        minor:次设备号,区分同种类型下的不同的设备;是特定设备的访问入口;

        mknod命令:建立块专用或字符专用文件

            -m MODE:为新建立的文件设定模式,就象应用命令chmod一样,以后仍然使 用缺省模式建立新目录。

    磁盘:

        IDE: /dev/hd[a-z]例如:/dev/hda, /dev/hdb

        SCSI, SATA, USB, SAS: /dev/sd[a-z]

    分区:

        /dev/sda,/dev/sdb,/dev/sdc

        /dev/sda1 

        /dev/sda2

        ...

        CentOS6和7统统将硬盘设备文件标识为/dev/sd[a-z]#

        引用设备的方式:

        设备文件名

        卷标

        UUID

    磁盘分区:MBR, GPT


HDD 上的位置代码的用意
001-440 bytes由 BIOS 启动的 MBR 启动代码
441-446 bytesMBR 硬盘签名
447-510 bytes分区表 (主分区和扩展分区,而非逻辑分区)
511-512 bytesMBR 启动签名 0xAA55.


    MBR导致的问题

    1. 只能有四个主分区或者三个主分区加一个扩展分区 (以及在扩展分区中的任意数量的逻辑分区). 如果你有三个主分区加一个扩展分区以及除此之外的空闲空间,在空闲空间之上你无法创立分区。

    2. 在扩展分区里,逻辑分区的元数据被存储在一个链表结构中。如果一个环节丢失,该元数据之后的逻辑分区全部丢失。

    3. MBR 只支持1个字节的分区类型编码,导致许多冲突。

    4. MBR 使用32位的 LBA 值来存储分区扇区信息。LBA 的大小以及512B的扇区大小共同限制了硬盘可寻址大小最大为2TB. 如果使用 MBR, 2TB以外的空间无法使用。

    GPT:

    全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体硬盘的分区表的结构布局的标准           。它是统一可扩展固件接口标准的一部分,它使用全局唯一标识来标识设备。它是新一代分区表格式,用            以替代 MBR 分区表。它用来解决 MBR 分区表的缺点,同时带来了一些优点

GPT 组成如下表:

HDD 上的位置用意
硬盘的第一个逻辑扇区或者第一个512B保护分区 (Protective MBR) - 与一般 MBR 相同但是这个64B区域仅包含了一个类型为 0xEE 的主分区条目,它定义在整个硬盘上,或者大小为2TB的区域(如果硬盘超过2TB)。
硬盘的第二个逻辑扇区或者第二个512B主 GPT 头 - 包含唯一硬盘 GUID, 主分区表的位置,分区表的可能条目数,它本身和主分区表的 CRC32 校验值,第二(或备份) GPT 头的位置
硬盘的第二个逻辑扇区之后的16 KB (默认)主 GPT 表 - 128个分区条目(默认,可以更高),每个包含大小为128B的条目(因此128个分区共占16KB)。扇区数存储为64位的 LBA 值,每个分区有一个分区类型 GUID 和一个唯一分区 GUID.
硬盘最后一个扇区前的16 KB (默认)第二 GPT 表 - 与主表完全相同,主要用于主表损坏时的修复。
硬盘最后一个逻辑扇区或者最后一个512B第二 GPT 头 - 包含唯一硬盘 GUID, 第二分区表的位置,分区表的可能条目数,它本身和第二分区表的 CRC32 校验值,主 GPT 头的位置。这个头用于当主头损坏时恢复 GPT 信息。

    GPT 的优点

    使用 GUID (UUID) 来表明分区类型 - 无冲突。

    为每个分区提供了一个唯一硬盘 GUID 和一个唯一分区 GUID - 一个好的不依赖文件系统的引用分区和硬盘的方式。

    任意分区数 - 取决于给分区表分配的空间 - 不需要扩展和逻辑分区。GPT ,默认包含了定义128个分区的空间。当用户想要更多

    分区时,他可以给分区表分配更多空间 (目前只有 gdisk 支持这一特性)。

    使用64位 LBA 存储扇区数 - 最大硬盘可寻址大小为 2 ZB.

    存储了备份头和分区表可于主要部分损坏时进行急救。

    CRC32 校验值用于检测头和分区表的错误与损坏。

    因为 GPT 是 UEFI 标准的一部分,因此所有 UEFI 引导器都支持 GPT 硬盘,并是从 UEFI 启动的强制要求。

fdisk命令:

    1、查看磁盘的分区信息:

        fdisk -l [-u] [device...]:列出指定磁盘设备上的分区情况;

    2、管理分区

        fdisk  device

        fdisk提供了一个交互式接口来管理分区,它有许多子命令,分别用于不同的管理功能;所有的操作均在内存中完成,没

        有直接同步到磁盘;直到使用w命令保存至磁盘上;

        常用命令:

        n:创建新分区

        d:删除已有分区

        t:修改分区类型

        l:查看所有已经ID

        w:保存并退出

        q:不保存并退出

        m:查看帮助信息

        p:显示现有分区信息

    在已经分区并且已经挂载其中某个分区的磁盘设备上创建的新分区,内核可能在创建完成后无法直接识别;

    查看:cat  /proc/partitions

    通知内核强制重读磁盘分区表:

    CentOS 5:partprobe [device]

    CentOS 6,7:partx, kpartx

    partx -a [device]

    kpartx -af [device]

    分区创建工具:parted, sfdisk;

    创建文件系统:

    格式化:低级格式化(分区之前进行,划分磁道)、高级格式化(分区之后对分区进行,创建文件系统)

    元数据区,数据区

    元数据区:

    文件元数据:inode (index node)

    大小、权限、属主属组、时间戳、数据块指针

    符号链接文件:存储数据指针的空间当中存储的是真实文件的访问路径;

    设备文件:存储数据指针的空间当中存储的是设备号(major, minor);

    bitmap index:位图索引

    VFS: Virtual File System

Linux的文件系统: ext2(无日志功能), ext3, ext4, xfs, reiserfs, btrfs

    光盘:iso9660

    网络文件系统:nfs, cifs

    集群文件系统:gfs2, ocfs2

    内核级分布式文件系统:ceph

    windows的文件系统:vfat, ntfs

    伪文件系统:proc, sysfs, tmpfs, hugepagefs

    Unix的文件系统:UFS, FFS, JFS

    交换文件系统:swap

    用户空间的分布式文件系统:mogilefs, moosefs, glusterfs

    文件系统管理工具:

    创建文件系统的工具

mkfs

    -t 文件类型(ext2,ext3...)


检测及修复文件系统的工具

fsck

    -t 文件类型(ext2,ext3...)

dumpe2fs命令:显示ext系列文件系统的属性信息

    dumpe2fs  [-h] device


调整文件系统特性:

    tune2fs:查看或修改ext系列文件系统的某些属性 

        adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems;

    注意:块大小创建后不可修改;

tune2fs [OPTIONS] device

    -l:查看超级块的内容;

   修改指定文件系统的属性:

    -j:ext2 --> ext3;

    -L LABEL:修改卷标;

    -m #:调整预留空间百分比;

    -O [^]FEATHER:开启或关闭某种特性;

    -o [^]mount_options:开启或关闭某种默认挂载选项

    acl

    ^acl

ext系列文件系统的管理工具:

mkfs.ext2, mkfs.ext3, mkfs.ext4

mkfs -t ext2 = mkfs.ext2


ext系列文件系统专用管理工具:mke2fs

mke2fs [OPTIONS]  device

    -t {ext2|ext3|ext4}:指明要创建的文件系统类型

        mkfs.ext4 = mkfs -t ext4 = mke2fs -t ext4

    -b {1024|2048|4096}:指明文件系统的块大小;

    -L LABEL:指明卷标;

    -j:创建有日志功能的文件系统ext3;

        mke2fs -j = mke2fs -t ext3 = mkfs -t ext3 = mkfs.ext3

    -i #:bytes-per-inode,指明inode与字节的比率;即每多少字节创建一个Indode; 

    -N #:直接指明要给此文件系统创建的inode的数量;

    -m #:指定预留的空间,百分比;

    -O [^]FEATURE:以指定的特性创建目标文件系统; 

e2label命令:卷标的查看与设定

    查看:e2label device

    设定:e2label device LABEL

tune2fs命令:查看或修改ext系列文件系统的某些属性 

        adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems;

        注意:块大小创建后不可修改;

tune2fs [OPTIONS] device

    -l:查看超级块的内容;

  修改指定文件系统的属性:

    -j:ext2 --> ext3;

    -L LABEL:修改卷标;

    -m #:调整预留空间百分比;

    -O [^]FEATHER:开启或关闭某种特性;

    -o [^]mount_options:开启或关闭某种默认挂载选项

    acl

    ^acl

    dumpe2fs命令:显示ext系列文件系统的属性信息

    dumpe2fs  [-h] device


用于实现文件系统检测的工具

因进程意外中止或系统崩溃等 原因导致定稿操作非正常终止时,可能会造成文件损坏;此时,应该检测并修复文件系统; 建议,离线进行; 

ext系列文件系统的专用工具:

e2fsck : check a Linux ext2/ext3/ext4 file system

e2fsck [OPTIONS]  device

    -y:对所有问题自动回答为yes; 

    -f:即使文件系统处于clean状态,也要强制进行检测;

fsck:check and repair a Linux file system

    -t fstype:指明文件系统类型;

        fsck -t ext4 = fsck.ext4

    -a:无须交互而自动修复所有错误;

    -r:交互式修复;

blkid命令:

blkid device

blkid  -L LABEL:根据LABEL定位设备

blkid  -U  UUID:根据UUID定位设备 


swap文件系统:

Linux上的交换分区必须使用独立的文件系统;

且文件系统的System ID必须为82;

创建swap设备:mkswap命令

mkswap [OPTIONS]  device

-L LABEL:指明卷标

-f:强制


文件系统的使用:

首先要“挂载”:mount命令和umount命令

根文件系统这外的其它文件系统要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”;此目录即为“挂载点”;

挂载点:mount_point,用于作为另一个文件系统的访问入口;

(1) 事先存在;

(2) 应该使用未被或不会被其它进程使用到的目录;

(3) 挂载点下原有的文件将会被隐藏;


mount命令:

    mount  [-nrw]  [-t vfstype]  [-o options]  device  dir

命令选项:

    -r:readonly,只读挂载; 

    -w:read and write, 读写挂载; 

    -n:默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab文件中;-n用于禁止此特性;

    -t vfstype:指明要挂载的设备上的文件系统的类型;多数情况下可省略,此时mount会通过blkid来判断要挂载的设备的文件系统

          类型;

    -L LABEL:挂载时以卷标的方式指明设备;

            mount -L LABEL dir

    -U UUID:挂载时以UUID的方式指明设备;

            mount -U UUID dir

    -o options:挂载选项

    sync/async:同步/异步操作;

    atime/noatime:文件或目录在被访问时是否更新其访问时间戳;

    diratime/nodiratime:目录在被访问时是否更新其访问时间戳;

    remount:重新挂载; 

    acl:支持使用facl功能;

        # mount -o acl  device dir 

        # tune2fs  -o  acl  device 

    ro:只读 

    rw:读写 

    dev/nodev:此设备上是否允许创建设备文件;

    exec/noexec:是否允许运行此设备上的程序文件;

    auto/noauto:

    user/nouser:是否允许普通用户挂载此文件系统;

    suid/nosuid:是否允许程序文件上的suid和sgid特殊权限生效;

    defaults:Use default options: rw, suid, dev, exec, auto, nouser, async, and relatime.

mount使用技巧:

    可以实现将目录绑定至另一个目录上,作为其临时访问入口;

        mount --bind  源目录  目标目录

查看当前系统所有已挂载的设备:

    # mount 

    # cat  /etc/mtab

    # cat  /proc/mounts

挂载光盘:

    mount  -r  /dev/cdrom  mount_point

光盘设备文件:/dev/cdrom, /dev/dvd

挂载U盘:

事先识别U盘的设备文件;

挂载本地的回环设备:

    # mount  -o  loop  /PATH/TO/SOME_LOOP_FILE   MOUNT_POINT 

umount命令:

    umount  device|dir


注意:正在被进程访问到的挂载点无法被卸载;

查看被哪个或哪些进程所战用:

    # lsof  MOUNT_POINT

    # fuser -v  MOUNT_POINT


终止所有正在访问某挂载点的进程:

    # fuser  -km  MOUNT_POINT


交换分区的启用和禁用:

创建交换分区的命令:mkswap

启用:swapon

swapon  [OPTION]  [DEVICE]

-a:定义在/etc/fstab文件中的所有swap设备;

禁用:swapoff

swapoff DEVICE


设定除根文件系统以外的其它文件系统能够开机时自动挂载:/etc/fstab文件 

每行定义一个要挂载的文件系统及相关属性:

6个字段:

(1) 要挂载的设备:

设备文件;

LABEL

UUID

伪文件系统:如sysfs, proc, tmpfs等


(2) 挂载点 

swap类型的设备的挂载点为swap;


(3) 文件系统类型;


(4) 挂载选项

defaults:使用默认挂载选项;

如果要同时指明多个挂载选项,彼此间以事情分隔;

defaults,acl,noatime,noexec


(5) 转储频率

0:从不备份;

1:每天备份;

2:每隔一天备份;


(6) 自检次序

0:不自检;

1:首先自检,通常只能是根文件系统可用1;

2:次级自检

...


mount  -a:可自动挂载定义在此文件中的所支持自动挂载的设备;

两个命令:df和du

df命令:

  -l:仅显示本地文件的相关信息;

  -h:human-readable

  -i:显示inode的使用状态而非blocks

du命令: 

  -s: sumary

  -h: human-readable