linux磁盘、文件系统管理
硬盘:机械硬盘、固态硬盘
计算硬盘速度:IoPs:(Io per second ) 每秒20次
机械硬盘:
track:磁道
平均寻道时间
5400rpm 每分钟5400转,(一般笔记本)
10000/15000 台式电脑
sector:扇区(一个扇区512byte,)
cylinder:柱面(一块弹片上的上下两面的同一个磁道)
不同弹面上的同一个编号的叫柱面,分区划分是给予柱面的
1.为什么要分区?
因为硬盘很大,为了使得一个硬盘中可以组织为多个可独立管理的文件系统,所以要分区,每一个被划分出来的分区是独立的块设备。
设备分两类:
随机访问设备:
块设备:Block,存取单位是“块”,如硬盘
线性访问设备:
字符设备:“char”,存取单位是“字符”,如键盘
每一个设备都有一个文件作为它的访问入口,此文件我们称之为设备文件,该文件关联至一个设备驱动程序,进而能够与之对应的硬件设备通信
每一个硬件设备在内核集中都是靠一个设备号来进行标识的
设备号:用来标识设备,不同类别的设备各有不同的设备号,同一类别的设备有不同设备或多个设备,因此就有主设备号和次设备号
主设备号:major:用来识别设备类型
次设备号:minor:用来识别同一类型下的不同设备
MBR(Master Boot Record):主引导记录
在硬盘上有一个0磁道0扇区是被预留出来的,他不属于任何分区,这个扇区称之为MBR,严格意义上讲应该叫做用来存储MBR的一段空间,
0磁道0扇区:
该扇区的大小为512bytes,专门用来存储MBR(Master Boot Record)主引导记录,MBR又分为三部分
第一部分:446个字节:存储boot loader,引导加载器
第二部分:64bytes:存储分区表:有多少多少个分区,每个分区从哪里开始到哪里结束;其中每16个字节表示一个分区,因此64除16等于4,so,一块设备最多只能有4个主分区;
第三部分:2bytes:前面信息的有效性标识(结束标志),用4个16进制数来表示55AA,表示前面510bytes是有效的。
如果一块硬盘需要划分超过4个分区,则需要其中16个字节的主分区划分为扩展分区,扩展分区中可以划分无数个逻辑分区(当然也得硬盘大小决定)
注意:当磁盘容量超过2T的时候,MBR机制不能识别到2T以上的磁盘空间,此时需要用到GPT机制来进行分区
文件系统管理
重新创建文件系统会损坏原有文件
分区管理:
fisk命令:管理MBR(Master Boot Record)磁盘分区表
fdisk提供了一个交互式接口来管理分区,他有许多子命令,分别用于不同的管理功能,所有操作都是在内存中完成,没有直接同步到磁盘,如果分区完成,输出w命令保存退出后才写到磁盘并生效。
类型:分区所在场景类型(使用·fdisk /dev/磁盘· 使用l命令即可查看所有id对应分区类型)
正常分区:83
扩展分区:5
交换分区:82
Device Boot Start End Blocks Id System /dev/sdb1 * 1 26 204800 83 Linux /dev/sdb2 26 7859 62914560 8e Linux LVM
注:centos6上“start”字段和“End”字段表示的是此分区的大小是按照柱面的单位划分大小(表示开始柱面和结束柱面)
centos7上“start”字段和“End”字段表示的是此分区的大小是按照扇区的单位划分大小(表示开始扇区和结束扇区)
1.查看分区情况:
fdisk -l[u] [device]
列出指定磁盘设备的分区情况
(1)#fdisk -l 列出所有分区设备
(2)#fdisk -l /dev/sda 列出sda磁盘的分区情况
root@localhost mntsdb]# fdisk -l /dev/sda Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0x000682bf Device Boot Start End Blocks Id System /dev/sdb1 * 1 26 204800 83 Linux Partition 1 does not end on cylinder boundary. /dev/sdb2 26 7859 62914560 8e Linux LVM
2.管理分区
fdisk [u] [device]
#fdisk -u /dev/sda //进入fdisk配置分区界面,选项”u“可不用写。
[root@localhost mntsdb]# fdisk -u /dev/sdb WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c'). Command (m for help): 在此键入命令,可用m查看命令
进入配置交互式界面常用命令:
n:创建新分区
d:删除指定已有的分区
t:修改分区类型
l:查看所有id对应分区类型,
p:列出已有分区
w:保存退出
q:不保存退出
m:帮助 (列出所有交互命令)
n:创建新分区
Command (m for help): n //新建分区,n命令 Command action //列出当前可创建的分区 e extended //扩展分区 p primary partition (1-4 ) //主分区 p //输入p命令,创建主分区 Partition number (1-4): 1 //主分区号1 First cylinder (1-2610, default 1): //分区开始柱面(centos6是以柱面为单位划分分区大小) Using default value 1 //直接回车从第一个开始 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +1G //大小为1G,指定分区大小有三种方法(1、输出最后柱面,表示从开始柱面到结束柱面大小2、+柱面,表示从开始柱面到指定的柱面,如+100,表示在第一个柱面的基础上增加100个柱面,3、直接输出分区大小,单位K/M/G ) Command (m for help): p //查看当前分区信息 一下为当前磁盘的描述信息,总大小为21.5GB,255个磁头,63个扇区为一个磁道,2610个柱面等等 ##################################### #Disk /dev/sdc: 21.5 GB, 21474836480 bytes #255 heads, 63 sectors/track, 2610 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: 0x4d566b71 ##################################### Device Boot Start End Blocks Id System /dev/sdc1 1 132 1060258+ 83 Linux
d:删除指定已有的分区
Command (m for help): p Device Boot Start End Blocks Id System /dev/sdc1 1 132 1060258+ 83 Linux /dev/sdc2 133 264 1060290 83 Linux /dev/sdc3 265 396 1060290 83 Linux Command (m for help): d Partition number (1-4): 1 Command (m for help): p Device Boot Start End Blocks Id System /dev/sdc2 133 264 1060290 83 Linux /dev/sdc3 265 396 1060290 83 Linux
t:修改分区类型
Device Boot Start End Blocks Id System /dev/sdc1 1 132 1060258+ 83 Linux /dev/sdc2 133 264 1060290 83 Linux /dev/sdc3 265 396 1060290 83 Linux Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): 82 //可使用大写L查看分区id号对应的分区类型 Changed system type of partition 2 to 82 (Linux swap / Solaris)
l:查看所有id对应分区类型,
Command (m for help): l 0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris 1 FAT12 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT- 2 XENIX root 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT- ...........................
p:列出已有分区
Command (m for help): p .......... Device Boot Start End Blocks Id System /dev/sdc1 1 132 1060258+ 83 Linux /dev/sdc2 133 264 1060290 82 Linux swap / Solaris /dev/sdc3 265 396 1060290 83 Linux
w:保存退出
Command (m for help): w
q:不保存退出
Command (m for help): q
m:帮助 (列出所有交互命令)
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 l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only)
注:在已有分区并且已经挂载中的分区所在的磁盘上创建的新分区,内核可能在创建完成后无法直接识别
查看磁盘生效的所有分区三种方法:
1、cat /proc/partitions
2、lsblk
//不加参数列出所有分区信息,后面可跟参数(如:lsblk /dev/sda ,只列出sda磁盘的分区信息)
3、ls /dev/sd* //因为现在的操作系统所有磁盘都是以sd开头命令
通知内核强制重读磁盘分区表:
centos6/7:partx -a [device] 同步指定的磁盘指定分区信息
-d:同步删除的分区信息,强读磁盘的分区信息
–nr: 同步磁盘的指定范围的分区信息,一般组合d使用
kpartx -af [device] 同步指定的磁盘所有分区信息
[root@localhost mntsdb]# partx -a /dev/sdc 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@localhost mntsdb]# kpartx -af /dev/sdc
注:parted 默认创建的是GPT类型的分区,fdisk创建的是MBR类型的分区
创建文件系统:
格式化分为两类:
低级格式化:(分区之前进行,划分磁道)
高级格式化:(分区之后进行,创建文件系统)
创建文件系统是划分分区的元数据区和数据区
元数据区:
文件的元数据(inode)
大小、权限、属组、属主、时间戳、数据块指针
VFS:virtual file system 虚拟文件系统
linux的文件系统:ext2/ext3/ext4/xfs/vfat/reiserfs/btrfs 光盘的文件系统:iso9660 网络文件系统:gfs2、ocfs2 交换文件系统:swap 伪文件系统:proc、sysfs、tmpfs unix文件系统:ufs、ffs、jfs(有日志)
注:linux的文件系统又以有无日志功能分类:其中:有日志的文件系统(ext3、ext4、xfs)无日志的文件系统(ext2、vfat)
文件系统管理工具分类:
1、创建文件系统的工具 mkfs、mke2fs(ext系列文件系统管理工具) 2、检测及修复文件系统的工具 fsck 3、查看文件系统属性的工具 dumpe2fs、tune2fs 4、调整文件系统特性的工具 tune2fs
1、创建文件系统:mkfs
mkfs -t ext2 /dev/sda1 //创建文件系统 mkfs -t ext2 = mkfs.ext2
2、专门管理ext系列文件:mke2fs
mke2fs [option] device -t :指明要创建的文件系统 -j: 创建ext3类型文件系统 -b BLOCK_SIZE: 指定块大小,默认为4096;可用取值为1024、2048或4096; -L LABEL:指定分区卷标; -m #: 指定预留给超级用户的块数百分比 -i #: 用于指定为多少字节的空间创建一个inode,默认为8192;这里给出的数值应该为块大小的2^n倍; -N #: 为数据空间创建多少个inode个数;
-t :指明要创建的文件系统
[root@localhost mntsdb]# mke2fs -t etx4 /dev/sdb2 [root@localhost mntsdb]# blkid /dev/sdb2 /dev/sdb2: UUID="c4359ac0-e295-48a8-bc78-916bfc644fbb" TYPE="ext2" 注:mke2fs -t etx4 /dev/sdb2 == mkfs.ext4 /dev/sdb2 == mkfs -t ext4 /dev/sdb2
-j: 创建ext3类型文件系统
[root@localhost ~]# mke2fs -j /dev/sdc1 ....... [root@localhost ~]# blkid /dev/sdc1 /dev/sdc1: UUID="03cb5410-c543-4d37-8857-3fa531c23718" SEC_TYPE="ext2" TYPE="ext3"
-b BLOCK_SIZE: 指定块大小,默认为4096;可用取值为1024、2048或4096;(只能用这是三个值)
[root@localhost ~]# mke2fs -b 2048 /dev/sdc2 .......... [root@localhost ~]# tune2fs -l /dev/sdc2 tune2fs 1.41.12 (17-May-2010) ....... First block: 0 Block size: 2048 //tune2fs ...... 注:块大小决定文件的寻址范围 块大小 直接寻址 间接寻址 二次间接寻址 三次间接寻址 1024 12KB 268KB 64.26MB 16.06GB 2048 24KB 1.02MB 513.02MB 265.5GB 4096 48KB 4.04MB 4GB~ 4TB
-L LABEL:指定分区卷标;
[root@localhost ~]# mke2fs -L "hello sdc3" /dev/sdc3 mke2fs 1.41.12 (17-May-2010) Filesystem label=hello sdc3 ....... [root@localhost ~]# blkid /dev/sdc3 /dev/sdc3: LABEL="hello sdc3" UUID="624cbf32-9331-4703-b787-65f1d1a471c4" TYPE="ext2"
-m #: 指定预留给超级用户的块数百分比
为超级用户保留的块的比例。为了防止所有的块都被用光,某些情况下启动不起来,必须要为超级用户保留一定比例的块,这个值默认是5%
[root@localhost ~]# mke2fs -m 10 /dev/sdc4 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 850304 inodes, 3397747 blocks 339774 blocks (10.00%) reserved for the super user //安装过程中提示出来的信息,预留10%给超级用户 [root@localhost ~]# tune2fs -l /dev/sdc4 //使用查看ext系列文件系统信息 ....... Reserved block count: 339774 //此为预留的超级块信息 .........
-i #: 用于指定为多少字节的空间创建一个inode,默认为8192;这里给出的数值应该为块大小的2^n倍
这个参数的含义是多少个字节分配一个inode。这个参数反映的是,我们对储存在我们文件系统上的每个文件大小的期许。换句话说,我们期待,每个文件都是4096个字节左右,每个文件需要一个inode。所以我们一共需要500M/4096=12800个inode。
举例说明,如果我打算在我这个ext2存储的文件都很小,比如说大多数文件都小于1K。那么如果这个-i的值为8192的话,就会出现下面的情况:总共有512000个块却只有64008个inode。 如果你还没体会到我的意思,那么看Group 0 ,1000个左右的free inode,但是有近8000个free block 。根据我的设定,我的文件大多数比较小,那么,当我的文件个数达到1000个时 free inode先用完了,Group 0 还有近7000个块空闲。 也就是说选错了 -i参数使我的inode先用完了。那么就算有大把的free block,你也无法创建文件了。
这个参数的取值范围是 1024~65536
设定原则为:考虑下你的大多数文件有多大,就设为多大。不设成1024的整数倍也是可以的。
[root@localhost ~]# mke2fs -j -i 2048 /dev/sdc4 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 6795776 inodes, 3397747 blocks
-N #: 指定inode个数;
[root@localhost ~]# mke2fs -N 1000 /dev/sdc4
小例题:在对分区进行创建文件系统时出现提示在运行时,如下类问题时:解决办法为(先运行:dmsetupstatus,观看提示结果,再运行 dmsetup remove_all,再次运行:dmsetup status 查看结果与之前有什么不同,此时再创建文件系统就没问题了
[root@localhost ~]# mkfs.ext4 /dev/sdc1 mke2fs 1.41.12 (17-May-2010) /dev/sdc1 is apparently in use by the system; will not make a filesystem here [root@localhost ~]#dmsetup status [root@localhost ~]#dmsetup remove_all [root@localhost ~]#dmsetup status
tune2fs: 查看或修改ext系列的文件系统的相关属性
注意:块大小创建后不能修改
-j: 不损害原有数据,将ext2升级为ext3;
[root@localhost ~]# blkid /dev/sdc4: UUID="ae221423-d29a-4d23-918c-6c2e22e969d3" TYPE="ext2" [root@localhost ~]# tune2fs -j /dev/sdc4 /dev/sdc4: UUID="ae221423-d29a-4d23-918c-6c2e22e969d3" SEC_TYPE="ext2" TYPE="ext3"
-L LABEL: 设定或修改卷标;
[root@localhost ~]# blkid /dev/sdc3: LABEL="hello sdc3" UUID="624cbf32-9331-4703-b787-65f1d1a471c4" TYPE="ext2" [root@localhost ~]# tune2fs -L "This is LABEL" /dev/sdc3 [root@localhost ~]# blkid /dev/sdc3: LABEL="This is LABEL" UUID="624cbf32-9331-4703-b787-65f1d1a471c4" TYPE="ext2"
-m #: 调整预留百分比;
#tune2fs -m 10 /dev/sdc4
-r #: 指定预留块数;
#tune2fs -r 4096 /dev/sda1
-o: 设定默认挂载选项;(对指定的分区设定挂载选项后,挂载此分区的目录将继承此功能)
#tune2fs -o acl /dev/sdc1 //设定acl控制。 #tune2fs -o ^acl /dev/sdc2 //关闭acl控制
-c #:指定挂载次数达到#次之后进行自检,0或-1表关闭此功能;
#tune2fs -c
-i #: 每挂载使用多少天后进行自检;0或-1表示关闭此功能;
[root@localhost ~]# tune2fs -l /dev/sdc1 ....... Mount count: 0 Maximum mount count: 35 //此分区超过挂载35次就检查文件系统 Last checked: Mon Jul 25 20:48:14 2016 Check interval: 15552000 (6 months) //此分区超过6个月就检查文件系统 这两个条件满足其中一个就触发检查 .......
-l: 显示超级块中的信息;
#tune2fs -l /dev/sdc1
blkid: 查询或查看磁盘设备的相关属性
blkid device
[root@localhost ~]# blkid /dev/sdc2 /dev/sdc2: UUID="82f6661f-9edc-4a2d-80a2-34e2e701f722" TYPE="ext2"
blkid -U UUID
[root@localhost ~]# blkid -U 82f6661f-9edc-4a2d-80a2-34e2e701f722 /dev/sdc2
blkid -L LABEL
[root@localhost ~]# blkid /dev/sdc3 /dev/sdc3: LABEL="hello world" UUID="624cbf32-9331-4703-b787-65f1d1a471c4" TYPE="ext2" [root@localhost ~]# blkid -L "hello world" /dev/sdc3
e2label: 用于查看或定义卷标
格式:e2label 设备文件 设定卷标
e2label device //查看分区卷标
[root@localhost ~]# e2label /dev/sdc3 hello world
e2label device LABEL 修改指定的分区的卷标,如果原本有则替换
[root@localhost ~]# e2label /dev/sdc4 hello [root@localhost ~]# e2label /dev/sdc4 hello
dumpe2fs: 显示ext系列文件系统属性信息
[root@localhost ~]# dumpe2fs /dev/sdc2 //显示系统属性信息
-h: 只显示超级块中的信息 [root@localhost ~]# dumpe2fs -h /dev/sdc2 dumpe2fs 1.41.12 (17-May-2010) Filesystem volume name: <none> Last mounted on: <not available> Filesystem UUID: 82f6661f-9edc-4a2d-80a2-34e2e701f722 Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: ext_attr resize_inode dir_index filetype sparse_super Filesystem flags: signed_directory_hash Default mount options: (none) Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 983040 Block count: 7855784 Reserved block count: 392789 Free blocks: 7725161 Free inodes: 983029 First block: 0 Block size: 2048 Fragment size: 2048 Reserved GDT blocks: 512 Blocks per group: 16384 Fragments per group: 16384 Inodes per group: 2048 Inode blocks per group: 256 Filesystem created: Mon Jul 25 20:57:37 2016 Last mount time: n/a Last write time: Mon Jul 25 20:57:38 2016 Mount count: 0 Maximum mount count: 27 Last checked: Mon Jul 25 20:57:37 2016 Check interval: 15552000 (6 months) Next check after: Sat Jan 21 20:57:37 2017 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 Default directory hash: half_md4 Directory Hash Seed: 083188b6-9e4c-433f-99dd-abe5be0b2b99
fsck: 检查并修复Linux文件系统(通用所有文件系统)
因进程意外终止或系统崩溃的原因导致写入操作时非正常终止时,可能会造成文件损坏,此时应该检测并修复文件西戎,建议离线进行
-t FSTYPE: 指定文件系统类型
-a: 自动修复
-r:交互式修复
e2fsck: 专用于修复ext2/ext3文件系统
e2fsck [options] device
-f: 强制检查;
[root@localhost ~]# e2fsck -f /dev/sda1
-y:对所有问题自动回答为yes
[root@localhost ~]# e2fsck -y /dev/sdc2 e2fsck 1.41.12 (17-May-2010) The filesystem size (according to the superblock) is 7855784 blocks The physical size of the device is 530145 blocks Either the superblock or the partition table is likely to be corrupt! Abort? ye
原创文章,作者:Lii,如若转载,请注明出处:http://www.178linux.com/40024