首页 > 代码库 > 磁盘相关的知识
磁盘相关的知识
每一块硬盘都由一个或多个盘片组成,每一个盘片都有两个可以读写的盘面组成。
硬盘的逻辑组成:
磁道(Track):盘片的同心圆就称为磁道。
柱面(Cylinder):所有盘片的同一个磁道就组成了柱面。柱面是分区的最小单位。
扇区(Sector):存储数据的最小单位。每一个扇区为512字节。扇区包含用户数据、以及该扇区的一些标识信息,如所位于的磁头、磁道等编号信息。
MBR:Master Boot Record
MBR位于0盘片,0磁道,0扇区的512字节。MBR属于磁盘,不属于任何分区。
MBR有512字节
446字节:Boot Loader(程序代码),通过Boot Loader加载操作系统的内核。
64字节:分区表,16字节标识一个分区信息,最多可以标识4个分区。即主分区+扩展分区<=4。扩展分区最多只有一个,扩展分区不能直接使用,必须要将其化为逻辑分区才可以使用。对于SCSI磁盘来说,逻辑分区最多只有11个,其中1-4为主分区和扩展分区,因此对于scsi磁盘来说,分区范围是1-16.对于IDE接口的硬盘来说,最多有59个逻辑分区,范围是1-63.
2字节:Magic Number,标识MBR是否有效。
文件系统是管理软件,将分区里面的数据分为两块,一块称为元数据(Metadata,类似于索引,存储的非数据本身),另一块是数据存储区(才是存放真正的数据的)。数据存储区又分为一个个的逻辑存储单元,称为磁盘块(Block),每一个块都有编号。
inode bitmap
block bitmap
inode
block
superblock
block group
设备文件:major、minor
设备文件是访问一个设备的入口。
创建一个设备文件:mknod
格式: mknod [options] name type [major minor]
示例:
[root@Server3 tmp]# mknod -m 644 frame b 100 1 [root@Server3 tmp]# ls -l total 1256 -rw-r--r-- 1 root root 641020 Jul 13 22:41 aa -rw-r--r-- 1 root root 641020 Jul 13 22:30 cc brw-r--r-- 1 root root 100, 1 jul 13 23:09 frame [root@Server3 tmp]#
Master IDE:主盘hda,从盘hdb
Slave IDE:主盘hdc,从盘hdd
SCSI/SATA/USB磁盘:sd
先识别的称为sda、接着是sdb、sdc……
主分区和扩展分区:1-4
逻辑分区:从5开始。
当前系统有几块硬盘:fdisk -l
[root@Server3 tmp]# fdisk -l Disk /dev/sda: 42.9 GB, 42949672960 bytes 255 heads, 63 sectors/track, 5221 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: 0x00047648 Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 26 1332 10485760 83 Linux [root@Server3 tmp]#
查看指定磁盘的信息:fdisk -l disk
示例:
[root@Server3 tmp]# fdisk -l /dev/sda Disk /dev/sda: 42.9 GB, 42949672960 bytes 255 heads, 63 sectors/track, 5221 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: 0x00047648 Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 26 1332 10485760 83 Linux [root@Server3 tmp]#
查看内核已经识别到的磁盘:cat /proc/pratitions
示例:
[root@Server3 ~]# cat /proc/partitions major minor #blocks name 8 0 41943040 sda 8 1 204800 sda1 8 2 10485760 sda2 [root@Server3 ~]#
重新让内核识别一下分区表:partprobe(RHEL5上用)
RHEL6上使用的是:partx -a /dev/sda
[root@Server3 ~]# partx -a /dev/sda BLKPG: Device or resource busy error adding partition 1 BLKPG: Device or resource busy error adding partition 2 [root@Server3 ~]# cat /proc/partitions major minor #blocks name 8 0 41943040 sda 8 1 204800 sda1 8 2 10485760 sda2 8 4 31 sda4 8 5 1059932 sda5 [root@Server3 ~]#
一个inode为128字节,在文件系统进行格式化时,metadata所占的磁盘空间就已经分配好了。
block size:1024字节(1K)、2048字节(2K)、4096字节(4K)
mkfs -t ext2 = mkfs.ext2 mkfs -t ext3 = mkfs.ext3 mke2fs:专门用于创建ext文件系统的指令。有很多的参数可供选择。 -n:并不是真正的创建文件系统,只是查找出备份的superblock的位置。 -L:设置文件系统的LABEL -b:指定文件系统的block的大小。有效值是1024、2048、4096 -t:指定文件系统类型,如ext2、ext3、ext4,默认为ext2 -c:检查文件系统是否有bad block。 -c -c:以读写的方式检查文件系统。 -E:扩展选项。 -j:创建一个具有日志功能的ext2文件系统,也就是ext3. -F:强制创建文件系统,即使该文件系统已经挂载。 -i:指定一个inode对应多少个字节。 -g:指定一个block group中的block的数量。 -G:指定block group的个数。 -I:指定inode的大小。 -m #:保留block的百分比,默认为5%,如果要保留为3%,则为-m 3。 -M:指定最近一次的挂载目录。 -N:inode的数量。 -U:指定文件系统的UUID。UUID可以用blkid来查看到。生成UUID用uuidgen指令。 -V:查看mke2fs的版本。
blkid:查看文件系统的UUID、文件系统类型以及LABEL 示例: [root@Server3 ~]# blkid /dev/sda1: UUID="4d6d0163-a389-4bbc-ac23-ec99adcf511c" TYPE="ext4" /dev/sda2: UUID="7fdde686-2694-4400-8093-8e2458391446" TYPE="ext4" /dev/sda5: UUID="2cbaad52-8080-4bd2-ad53-010b9dfadbbb" TYPE="ext2" LABEL="MYDATA" [root@Server3 ~]#
e2label:查看或定义label 语法格式:e2label device [ new-label ] 示例: [root@Server3 ~]# e2label /dev/sda5 MYDATA [root@Server3 ~]# e2label /dev/sda5 mydata [root@Server3 ~]# e2label /dev/sda5 mydata [root@Server3 ~]#
tune2fs:调整文件系统的属性信息。 -j:无损将ext2升级为ext3文件系统。 -c:最大挂载次数。如果为0或-1,则不会被e2fsck或kernel检测。 -C:挂载多少次在下次启动的时候就会被e2fsck进行文件系统检查。 -i #d|m|w:检查间隔。d为天,m为月,w为周。0或-1关闭此功能。 -l:列出文件系统的superblock信息。等同于dumpe2fs -h device -L:设置label。 -m:设置保留块的百分比。 -M:修改最近一次挂载的目录。 -o:挂载选项。常用的有acl。 -r:设置保留block的数量。 -T:设置最近一次使用e2fsck进行文件系统的检查时间。时间格式为:YYYYMMDD[HH[MM[SS]]],如果是now,则为当前时间。 -u:设置可以使用保留块空间的用户的username或uid -U:修改UUID。 说明:-c或-i对于数据库所在的磁盘来说,可能需要关闭该文件系统的自检功能。 示例: [root@Server3 ~]# tune2fs -c 0 /dev/sda5 tune2fs 1.41.12 (17-May-2010) Setting maximal mount count to -1 [root@Server3 ~]# tune2fs -i -1 /dev/sda5 tune2fs 1.41.12 (17-May-2010) Setting interval between checks to 18446744073709465216 seconds [root@Server3 ~]#
设置LABEL: [root@Server3 ~]# blkid /dev/sda5 /dev/sda5: UUID="2cbaad52-8080-4bd2-ad53-010b9dfadbbb" TYPE="ext2" LABEL="mydata" [root@Server3 ~]# e2label /dev/sda5 mydata [root@Server3 ~]# tune2fs -L MYDATA /dev/sda5 tune2fs 1.41.12 (17-May-2010) [root@Server3 ~]# e2label /dev/sda5 MYDATA [root@Server3 ~]#
查看ext2、ext3、ext4文件系统的信息:dumpe2fs -h:查看superblock的信息。等同于tune2fs -l 如果block的信息比较离散,就说明产生了碎片。
fsck:检查并修复文件系统。 -t fstype:指定文件系统的类型。 -a:自动修复。不需要重复的按y。 -y:等同于-a,在一些文件系统中,需要用-y。 e2fsck:专门用于检查并修复ext文件系统的。 -a:自动修复。不需要重复的按y。 -f:强制检查,即使文件系统是clean的。 -b backup-superblock:使用备份的superblock修复已经损坏的superblock。查看备份的superblock可以用mke2fs -n device即可。 说明:在对文件系统进行e2fsck或fsck检查时,需要将文件系统卸载。 示例: [root@Server3 ~]# e2fsck -f /dev/sda5 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 MYDATA: 11/66384 files (0.0% non-contiguous), 4503/264983 blocks [root@Server3 ~]#
挂载:将新的文件系统与当前根文件系统建立关联关系。 卸载:将新的文件系统与当前根文件系统解除关联关系。 mount:挂载。 语法格式:mount 设备 挂载点 设备: 设备文件:如/dev/sda5 卷标:LABEL="xxx" UUID:UUID="xxxx" 挂载点:为目录。 要求: 1. 此目录要事先存在。 2. 目录没有被其他进程使用。 3. 目录中如果有文件,则原文件会被暂时隐藏。 如果直接使用mount,则可以查看系统中所有已经挂在的设备。 示例: [root@Server3 ~]# mount /dev/sda2 on / type ext4 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw) /dev/sda1 on /boot type ext4 (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) /dev/sda5 on /backup type ext4 (rw) [root@Server3 ~]# 示例: [root@Server3 ~]# blkid /dev/sda5 /dev/sda5: LABEL="MYDATA" UUID="f2871de8-1e3d-4540-a3a8-30565c82fbec" TYPE="ext4" [root@Server3 ~]# tune2fs -c -1 -i -1 /dev/sda5 tune2fs 1.41.12 (17-May-2010) Setting maximal mount count to -1 Setting interval between checks to 18446744073709465216 seconds [root@Server3 ~]# mkdir /backup [root@Server3 ~]# mount /dev/sda5 /backup [root@Server3 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 9.9G 7.3G 2.1G 78% / tmpfs 245M 0 245M 0% /dev/shm /dev/sda1 194M 28M 156M 16% /boot /dev/sda5 1019M 34M 934M 4% /backup [root@Server3 ~]# 卸载:umount 格式: umount 设备 umount 挂载点 说明:卸载是,没有进程使用该文件系统。 示例: [root@Server3 backup]# umount /dev/sda5 umount: /backup: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1)) [root@Server3 backup]# umount /backup umount: /backup: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1)) [root@Server3 backup]#
mount语法格式: mount [options] [-o options] device mount-point options: -a:表示挂载在/etc/fstab文件中定义的所有文件系统。 -n:默认情况下,mount命令每挂载一次设备,都会将信息写入到/etc/mtab文件中。使用-n选项是不讲挂载信息写入到/etc/mtab文件中。 -t fstype:指定要挂载的设备上的文件系统的类型。如果没有指定该选项,则mount会调用blkid获取文件系统的类型。 -r:以只读的方式挂载。 -w:以读写的方式挂载。 -o:指定额外的挂载选项,也就是指定文件系统启用的属性。 async:数据时以异步的方式写入到硬盘。先保存到内存,然后在保存到硬盘。 sync:数据同步写入到硬盘。 atime:每一次写入都更新atime。每一次atime都会产生一次IO。 noatime:不更新atime。 auto:可以被-a选项自动的挂载。 noauto:不可自动的挂载。 defaults:使用默认的挂载选项。rw, suid, dev, exec, auto, nouser, async, and relatime. dev:允许文件系统中存在设备文件。 nodev:不允许文件系统中存在设备文件。 exec:允许执行二进制程序 noexec:不允许执行二进制程序。 _netdev:指定挂载的设备为网络上的设备,如果网络上的设备不可用,不会一直尝试挂载。 suid:允许文件系统上存在suid或sgid的文件并产生影响。 remount:尝试重新挂载一个已经挂载的文件系统。如mount -o remount,rw rw:以读写的方式挂载。 ro:以只读的方式挂载。 quota:启动quota功能。 --bind:额外的挂载到另外的一个目录。 sync和async性能对比: 说明:默认挂载选项为async。 [root@Server3 backup]# time cp -r /etc/* . real0m19.830s user0m0.029s sys0m5.395s [root@Server3 backup]# rm -rf * [root@Server3 backup]# mount -o remount,sync /dev/sda5 [root@Server3 backup]# time cp -r /etc/* . real2m34.755s user0m0.048s sys0m4.754s [root@Server3 backup]#
本文出自 “HeZhang” 博客,请务必保留此出处http://hezhang.blog.51cto.com/1347601/1438219