一、磁盘和文件系统

    计算机的外部存储器中也采用了类似磁带的装置,比较常用的一种叫磁盘,将圆形的磁性盘片装在一个方的密封盒子里,这样做的目的是为了防止磁盘表面划伤,导致数据丢失。

    将圆形的磁性盘片装在一个方形的密封盒子里。有了磁盘之后,人们使用计算机就方便多了,不但可以把数据处理结果存放在磁盘中,还可以把很多输入到计算机中的数据存储到磁盘中,这样这些数据可以反复使用,避免了重复劳动。可是不久之后,人们又发现了另一个问题:人们要存储到磁盘上的内容越来越多,众多的信息存储在一起,很不方便。这样就导致了文件系统的产生。

    文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等


二、磁盘管理

    机械式硬盘:secotr: 扇区(512bytes),track:磁道,cylinder: 磁柱(磁盘以磁柱为单位进行分区)

    零磁道处于硬盘上一个非常重要的位置,硬盘的主引导记录区(MBR)就在这个位置上。MBR位于硬盘的0磁头0柱面1扇区,其中存放着硬盘主引导程序和硬盘分区表。在总共512字节的硬盘主引导记录扇区中,446字节属于硬盘主引导程序,64字节属于硬盘分区表(DPT),两个字节(55 AA)属于分区结束标志。

    MBR: Master Boot Record(446bytes: boot loader,64bytes:分区表、16bytes: 标识一个分区,2bytes: 55AA分区结束标志)

    由于磁盘分区表的限制,一块磁盘仅能有4个主分区;3主分区+1扩展(N个逻辑分区,逻辑分区个数由操作系统限制)

    对于一个系统管理者( root )而言,磁盘的的管理是相当重要的一环,尤其近来硬盘已经渐渐的被当成是消耗品了 ..... 如果我们想要在系统里面新增一颗硬盘时,应该有哪些动作需要做的呢:

    ①、对磁盘进行分割,以创建可用的 partition ; 

    ②、对该 partition 进行格式化( format ),以创建系统可用的 filesystem; 

    ③、若想要仔细一点,则可对刚刚创建好的 filesystem 进行检验; 

    ④、在 Linux 系统上,需要创建挂载点 ( 亦即是目录 ),并将他挂载上来;


    fdisk -l [-u] [device...]

[root@wlw dev]# fdisk -l /dev/sda

Disk /dev/sda: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00091c83

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         131     1048576   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2             131        1437    10485760   83  Linux
/dev/sda3            1437        1567     1048576   82  Linux swap / Solaris
#磁盘设备的设备文件命名:IDE: /dev/hd。SCSI, SATA, SAS, USB: /dev/sd
#不同磁盘设备设备:a-z,例如:/dev/sda, /dev/sdb, ...
#同一磁盘设备上的不同分区:1,2, ...,例如:/dev/sda1, /dev/sda5
#fdisk -l可以显示磁盘的各分区详细信息,这里我们可以看到一共有6527 cylinders,而我们最后一个分区仅使用了
#1567 cylinders,所以代表此磁盘还有4960 cylinders可用


    获取磁盘分区工具fdisk帮助信息,这里不要使用/dev/sda1,这个为分区名而不是磁盘设备名,磁盘设备名为/dev/sda

[root@wlw dev]# fdisk /dev/sda

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition                            <==删除一个partition
   l   list known partition types                    <==列出所有partition id
   m   print this menu                               <==列出帮助信息
   n   add a new partition                           <==新增一个partition
   o   create a new empty DOS partition table
   p   print the partition table                     <==在屏幕上显示分割表
   q   quit without saving changes                   <==不储存离开fdisk程序
   s   create a new empty Sun disklabel
   t   change a partition's system id                <==调整partition id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit                  <==将刚刚的动作写入分割表
   x   extra functionality (experts only)
#进入磁盘分区界面可以发送m指令获取相关指令帮助,上面列出参见的一些指令信息


    添加磁盘分区

[root@wlw dev]# fdisk /dev/sda

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Selected partition 4
First cylinder (1567-6527, default 1567): 
Using default value 1567
Last cylinder, +cylinders or +size{K,M,G} (1567-6527, default 6527): +10G

Command (m for help): p

Disk /dev/sda: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00091c83

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         131     1048576   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2             131        1437    10485760   83  Linux
/dev/sda3            1437        1567     1048576   82  Linux swap / Solaris
/dev/sda4            1567        2872    10485404   83  Linux
#可以看到我们新添加的大小为10G的主分区/dev/sda4,每次添加完分区操作需要发送w指令保存才能生效,如果是直接
#Ctrl+c或q退出则代表不保存当前分区操作

    删除磁盘分区

[root@wlw dev]# fdisk /dev/sda

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): d
Partition number (1-4): 4

Command (m for help): p

Disk /dev/sda: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00091c83

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         131     1048576   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2             131        1437    10485760   83  Linux
/dev/sda3            1437        1567     1048576   82  Linux swap / Solaris
#可以看到刚刚新添加的磁盘分区已经没有了

    当我们添加完磁盘分区保存退出后,可以查看内核是否已经识别新的分区,因为只有内核识别了我们添加的分区才能格式化使用

[root@wlw dev]# cat /proc/partitions 
major minor  #blocks  name

   8        0   52428800 sda
   8        1    1048576 sda1
   8        2   10485760 sda2
   8        3    1048576 sda3
#这里只看到了sda1,sda2,sda3分区,并没有我们刚刚添加的新的磁盘分区,这是因为开机的时候内核已经识别好分区了
#所以我们新添加的分区需要通知内核重新识别,可以重启让内核重新识别,或通过命令通知内核重新识别

    通过命令让内核重新识别分区表

    partx -a /dev/DEVICE (Centos 6建议使用此命令)

    partprobe [/dev/DEVICE]  (Centos 5使用此命令)

[root@wlw dev]# partx -a /dev/sda
BLKPG: Device or resource busy
error adding partition 1
BLKPG: Device or resource busy
error adding partition 2
BLKPG: Device or resource busy
error adding partition 3
[root@wlw dev]# partx -a /dev/sda
BLKPG: Device or resource busy
error adding partition 1
BLKPG: Device or resource busy
error adding partition 2
BLKPG: Device or resource busy
error adding partition 3
BLKPG: Device or resource busy
error adding partition 4
[root@wlw dev]# cat /proc/partitions 
major minor  #blocks  name

   8        0   52428800 sda
   8        1    1048576 sda1
   8        2   10485760 sda2
   8        3    1048576 sda3
   8        4   20975849 sda4
#第一次执行partx -a /dev/sda并没有识别到sda4,此时我们可以重复执行多一次,可以看到内核已经识别到sda4


、文件系统管理

    磁盘分区后需要对分区进行文件系统格式化后才能挂载使用。

    Linux文件系统: ext2, ext3, ext4, xfs, btrfs, reiserfs, jfs, swap(交换分区)

    根据其是否支持"journal"功能:

        日志型文件系统: ext3, ext4, xfs, ...

        非日志型文件系统: ext2, vfat

Linux系统管理之磁盘管理、文件系统管理_固态硬盘


    文件系统的创建

        mkfs.FS_TYPE(ext4,xfs,btrfs) /dev/DEVICE

        mkfs -t FS_TYPE /dev/DEVICE

这两个命令为通用的文件系统创建工具,调用的接口是一样的

[root@wlw dev]# mkfs [tab][tab]
mkfs          mkfs.ext2     mkfs.ext4     mkfs.msdos
mkfs.cramfs   mkfs.ext3     mkfs.ext4dev  mkfs.vfat
#这里可以看到当前系统能够支持创建的文件系统,如果需要其他文件系统需要加载对应的模块。


    对刚刚分区的/dev/sda4进行文件ext4的文件系统创建

[root@wlw ~]# mkfs.ext4 /dev/sda4
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1311184 inodes, 5243962 blocks
262198 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
161 block groups
32768 blocks per group, 32768 fragments per group
8144 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 29 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.


    由于现在大多数Linux上使用的还是ext系列的文件系统,所以下面详细介绍一下mke2fs,ext系列文件系统专用管理工具。

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

    mke2fs OPTION /dev/DEVICE

        -t {ext2|ext3|ext4}:指定文件系统

        -b {1024|2048|4096}:指定块大小

-L 'LABEL':指定卷标名

-j: 相当于 -t ext3

-i #: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小;

-N #:为数据空间创建多少个inode;

-m #: 为管理人员预留的空间占据的百分比;

-O FEATURE[,...]:启用指定特性

-O ^FEATURE:关闭指定特性

[root@wlw ~]#  mke2fs -t ext4 -L "sda4" -b 2048 -i 8192 /dev/sda4
mke2fs 1.41.12 (17-May-2010)
Filesystem label=sda4
OS type: Linux
Block size=2048 (log=1)
Fragment size=2048 (log=1)
Stride=0 blocks, Stripe width=0 blocks
2625536 inodes, 10487924 blocks
524396 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=548405248
641 block groups
16384 blocks per group, 16384 fragments per group
4096 inodes per group
Superblock backups stored on blocks: 
	16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816, 1327104, 
	2048000, 3981312, 5619712, 10240000

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

    其实 mke2fs 所使用的各项选项/参数也可以用在『 mkfs -t ext3 ... 』后面,因为最终使用的公用程序是相同的!如果没有特殊需求的话,使用『 mkfs -t ext3....』不但容易记忆,而且就非常好用。


    mkswap:创建交换分区

        mkswap [options] device:指明要挂载的设备;`

        前提:调整其分区的ID为82  Linux swap / So;

[root@wlw ~]# fdisk /dev/sda

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): t
Partition number (1-4): 4
Hex code (type L to list codes): 82
Changed system type of partition 4 to 82 (Linux swap / Solaris)

Command (m for help): p

Disk /dev/sda: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00091c83

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         131     1048576   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2             131        1437    10485760   83  Linux
/dev/sda3            1437        1567     1048576   82  Linux swap / Solaris
/dev/sda4            1567        2872    10485404   82  Linux swap / Solaris
#把/dev/sda4的分区格式调整为Linux swap / So

[root@wlw ~]# mkswap -L 'sd4swap' /dev/sda4
Setting up swapspace version 1, size = 20975844 KiB
LABEL=sd4swap, UUID=67f662c9-7ac7-4ac2-8b07-e0e989caee39


四、文件系统常见相关工具

①、blkid:块设备属性信息查看

    blkid [OPTION]... [DEVICE]

        -U UUID: 根据指定的UUID来查找对应的设备

        -L LABEL:根据指定的LABEL来查找对应的设备

[root@wlw ~]# blkid
/dev/sda1: UUID="4c49beb0-6125-44ba-a1a4-9cba332717ee" TYPE="ext4" 
/dev/sda2: UUID="a503d00c-a6f8-4045-bb53-1e22aef42561" TYPE="ext4" 
/dev/sda3: UUID="fc7c9f09-7741-41bf-832b-ab55bba6031a" TYPE="swap" 
/dev/sda4: LABEL="sd4swap" UUID="67f662c9-7ac7-4ac2-8b07-e0e989caee39" TYPE="swap" 
#查看所有文件格式化分区的设备属性信息
[root@wlw ~]# blkid /dev/sda4
/dev/sda4: LABEL="sd4swap" UUID="67f662c9-7ac7-4ac2-8b07-e0e989caee39" TYPE="swap"
#查看指定文件格式化分区的设备属性信息
[root@wlw ~]# blkid -U "4c49beb0-6125-44ba-a1a4-9cba332717ee"
/dev/sda1
[root@wlw ~]# blkid -L sd4swap
/dev/sda4


②、e2label:查看ext系列文件系统的LABEL

        e2label DEVICE [LABEL]

[root@wlw ~]# e2label /dev/sda4
sda4


③、tune2fs:重新设定ext系列文件系统可调整参数的值

        -l:查看指定文件系统超级块信息;super block

        -L 'LABEL':修改卷标

        -m #:修预留给管理员的空间百分比

        -j: 将ext2升级为ext3

        -O: 文件系统属性启用或禁用

        -o: 调整文件系统的默认挂载选项

        -U UUID: 修改UUID号;

[root@wlw ~]# tune2fs -l /dev/sda1
tune2fs 1.41.12 (17-May-2010)
Filesystem volume name:   <none>
Last mounted on:          /boot
Filesystem UUID:          4c49beb0-6125-44ba-a1a4-9cba332717ee
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              65536
Block count:              262144
Reserved block count:     13107
Free blocks:              240829
Free inodes:              65499
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      63
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Flex block group size:    16
Filesystem created:       Wed Sep 23 18:58:45 2015
Last mount time:          Sun Sep 27 20:59:48 2015
Last write time:          Sun Sep 27 20:59:48 2015
Mount count:              3
Maximum mount count:      -1
Last checked:             Wed Sep 23 18:58:45 2015
Check interval:           0 (<none>)
Lifetime writes:          83 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:	          256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      b7e87d5f-01a5-4e06-9d14-723d1c050b35
Journal backup:           inode blocks


④、dumpe2fs -h [DEVICE]:查看超级块信息


、文件系统检测工具

    由于系统在运行时谁也说不准啥时硬件或者是电源会有问题,所以『死机』可能是难免的情况(不管是硬件还是软件)。 现在我们知道文件系统运行时会有硬盘与内存数据异步的状况发生,因此莫名其妙的死机非常可能导致文件系统的错乱。此时就需要文件系统检测工具进行修复。


fsck: File System CheCk

    fsck.FS_TYPE  [DEVICE]

    fsck -t FS_TYPE  [DEVICE]

    -a: 自动修复错误

    -r: 交互式修复错误

    -c:显示修复的详细进度

    -f:强制修复

    Note: FS_TYPE一定要与分区上已经文件类型相同;

[root@wlw ~]# fsck -C -f -t ext4 /dev/sda4
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure                                  
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information                            
/dev/sda4: 11/1311184 files (0.0% non-contiguous), 126320/5243962 bloc


e2fsck:ext系列文件专用的检测修复工具

    -y:自动回答为yes; 

    -f:强制修复;

[root@wlw ~]# e2fsck -y -f /dev/sda4
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sda4: 11/1311184 files (0.0% non-contiguous), 126320/5243962 blocks