一、磁盘和文件系统
计算机的外部存储器中也采用了类似磁带的装置,比较常用的一种叫磁盘,将圆形的磁性盘片装在一个方的密封盒子里,这样做的目的是为了防止磁盘表面划伤,导致数据丢失。
将圆形的磁性盘片装在一个方形的密封盒子里。有了磁盘之后,人们使用计算机就方便多了,不但可以把数据处理结果存放在磁盘中,还可以把很多输入到计算机中的数据存储到磁盘中,这样这些数据可以反复使用,避免了重复劳动。可是不久之后,人们又发现了另一个问题:人们要存储到磁盘上的内容越来越多,众多的信息存储在一起,很不方便。这样就导致了文件系统的产生。
文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于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
文件系统的创建
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