在linux运维工作中,熟练掌握磁盘管理相关技能是对运维人员最基本的要求。最近在学习系统管理的内容,而磁盘分区是其中比较重要的一部分内容。本实验所用linux系统为Centos6.6,涉及到的知识为linux磁盘分区。
一、在实验前必须先要了解磁盘管理的基本知识:
1、MBR,Master Boot Record(主引导记录)
MBR为磁盘第0磁道第0扇区,共512字节,从上图可以知道,Bootloader占据446字节,而Partition分区表占据了64字节,每个分区需要16字节,所以分区表只能标识4个分区的信息。那要想建立多余4个分区怎么办呢?办法就是3+1(N),即建立3个主分区(Primary )和一个扩展分区(extended),而扩展分区里划分了N个逻辑分区(logical),扩展分区本身并不可用,里面包含的逻辑分区才是可用的分区。
2、磁盘设备文件的命名规则
IDE硬盘:/dev/hd
SCSI,SATA,SAS,USB等存储设备:/dev/sd#
不同设备:a-z #例如/dev/sda, /dev/sdb, ...
同一设备上的不同分区:1,2, ..., #例如/dev/sda1, ... /dev/sda5…
3、文件系统类别
1) 各平台文件系统类别
Linux文件系统:
ext2,ext3, ext4, xfs, btrfs, reiserfs, jfs
swap:交换分区
光盘:iso9660
Windows:fat32,ntfs
网络文件系统:NFS,CIFS
集群文件:GFS2,OCFS2
分布式文件系统:ceph,moosefs,mogilefs,GlusterFS,Lustre
2)根据其是否支持“journal”功能;
日志型文件系统:ext3, ext4, xfs ...
非日志型:ext2,vfat
3) linux文件系统的组成部分:
内核中的模块:ext4,xfs, vfat
用户空间的管理工具:mkfs.ext2,mkfs.ext4, mkfs.xfs,mkfs,vfat
4、常用的分区管理工具有: fdisk,parted, sfdisk。在这里使用的是fdisk工具进行分区。
相关语法:fdisk[OPTION]DEVICE
OPTION:
-l:列出给定设备的分区表信息,如果后面不指定DEVICE,
则列出从/proc/partitions 中获取到的信息。
-b:设定扇区大小(1024,2048,4096...)
子命令:管理功能
p:print,显示已有分区
n:new,创建
d:delete,删除
w:write,写入磁盘并退出
q:退出
m:获取帮助
l:列表所有分区的类型id
t:调整分区id
二、实验
1、在新建分区前,先用命令fdisk -l查看分区情况。磁盘在系统中命名为/dev/sda,假如再添加多一块磁盘,系统会显示新磁盘为/dev/sdb。由命令结果可看出系统中已存在2个主分区。
[[email protected] ~]#fdisk -l Disk /dev/sda: 85.9GB, 85899345920 bytes 255 heads, 63sectors/track, 10443 cylinders Units = cylinders of16065 * 512 = 8225280 bytes Sector size(logical/physical): 512 bytes / 512 bytes I/O size(minimum/optimal): 512 bytes / 512 bytes Disk identifier:0x0002791b Device Boot Start End Blocks Id System /dev/sda1 * 1 1913 15360000 83 Linux /dev/sda2 1913 1938 204800 82 Linux swap / Solaris
2、新建主分区。
命令:fdisk /dev/sda 对/dev/sda进行交互式分区管理,管理命令功能如下:
p:print,显示已有分区
n:new,创建
d:delete,删除
w:write,写入磁盘并退出
q:退出
m:获取帮助
l:列表所有分区的类型id
t:调整分区id
[[email protected] ~]#fdisk /dev/sda WARNING:DOS-compatible mode is deprecated. It‘s strongly recommended to switch off the mode (command ‘c‘) andchange display units to sectors (command ‘u‘). Command (m forhelp): p Disk /dev/sda: 85.9GB, 85899345920 bytes 255 heads, 63sectors/track, 10443 cylinders Units = cylinders of16065 * 512 = 8225280 bytes Sector size(logical/physical): 512 bytes / 512 bytes I/O size(minimum/optimal): 512 bytes / 512 bytes Disk identifier:0x0002791b Device Boot Start End Blocks Id System /dev/sda1 * 1 1913 15360000 83 Linux /dev/sda2 1913 1938 204800 82 Linux swap / Solaris
Command (m for help): n # 新建一个分区 Command action e extended p primary partition (1-4) p # 建立主分区 Partition number (1-4): 3 # 指定建立的分区 First cylinder (1938-10443, default 1938): # 不指定默认延续之前的柱面 Using default value1938 Last cylinder, +cylinders or +size{K,M,G} (1938-10443, default10443): +10G # 创建10G大小的主分区
3、调整分区id(根据实际需要,这里仅介绍)
默认创建为Linux(id为83),根据实际需要,若要创建为swap分区,则要调整分区id为82,即 Linux swap /So;若要创建Linux LVM 分区,则需调整分区id为8e。在这里按默认,不需要调整。
列出分区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 XENIXroot 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT- 3 XENIXusr 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT- 4 FAT16<32M 41 PPC PReP Boot 85 Linux extended c7 Syrinx (以下内容省略)…
调整分区:
使用Command t ,并指定分区,具体步骤在这里不演示。
4、建立扩展分区
需要注意的是,建立扩展分区时,如果之前已经分配好了3个主分区,不把剩余的全部的空间都占据,则没有被分配到的空间无法使用。因为逻辑分区只能在扩展分区的空间范围内。
Command (m forhelp): n Command action e extended p primary partition (1-4) e # 指定建立扩展分区 Selected partition 4 First cylinder(3244-10443, default 3244): Using default value3244 Last cylinder, +cylinders or +size{K,M,G} (3244-10443, default10443): # 回车指定使用默认全部空间 Usingdefault value 10443
5、建立逻辑分区
Command (m forhelp): n First cylinder(3244-10443, default 3244): Using default value3244 Last cylinder, +cylinders or +size{K,M,G} (3244-10443, default10443): +10G # 新建10G大小的逻辑分区
6、检查新建分区并保存退出
Command (m for help): p # 查看已有分区 Disk /dev/sda: 85.9GB, 85899345920 bytes 255 heads, 63sectors/track, 10443 cylinders Units = cylinders of16065 * 512 = 8225280 bytes Sector size(logical/physical): 512 bytes / 512 bytes I/O size(minimum/optimal): 512 bytes / 512 bytes Disk identifier:0x0002791b Device Boot Start End Blocks Id System /dev/sda1 * 1 1913 15360000 83 Linux /dev/sda2 1913 1938 204800 82 Linux swap / Solaris /dev/sda3 1938 3243 10483573+ 83 Linux /dev/sda4 3244 10443 57834000 5 Extended /dev/sda5 3244 4549 10490413+ 83 Linux Command (m forhelp): w # 切记,保存退出 The partition tablehas been altered! Calling ioctl() tore-read partition table. WARNING: Re-readingthe partition table failed with error 16: Device or resource busy. The kernel stilluses the old table. The new table will be used at the next reboot orafter you run partprobe(8) or kpartx(8) Syncing disks.
7、使新增分区生效
在上面交互式管理磁盘操作中,只是新建好分区,而内核不会主动去识别更改后的分区。用cat /proc/partitions命令查看,新建的分区还没生效。命令结果如下:
[[email protected] ~]#cat /proc/partitions major minor #blocks name 8 0 83886080 sda 8 1 15360000 sda1 8 2 204800 sda2
于是就要到partx命令,partx命令的用途是把现有的并编号的磁盘分区列表通知内核。在Centos 5.X中,用的是partprobe命令。
[[email protected] ~]#partx -a /dev/sda BLKPG: Device orresource busy error addingpartition 1 BLKPG: Device orresource busy error addingpartition 2
再用fdisk -l命令查看,由下结果可以看到,系统已经识别了新增的分区。fdisk -l 命令结果是把/proc/partitions里的分区表打印出来。
[[email protected] ~]#fdisk -l Disk /dev/sda: 85.9GB, 85899345920 bytes 255 heads, 63sectors/track, 10443 cylinders Units = cylinders of16065 * 512 = 8225280 bytes Sector size(logical/physical): 512 bytes / 512 bytes I/O size(minimum/optimal): 512 bytes / 512 bytes Disk identifier:0x0002791b Device Boot Start End Blocks Id System /dev/sda1 * 1 1913 15360000 83 Linux /dev/sda2 1913 1938 204800 82 Linux swap / Solaris /dev/sda3 1938 3243 10483573+ 83 Linux /dev/sda4 3244 10443 57834000 5 Extended /dev/sda5 3244 4549 10490413+ 83 Linux
8、格式化分区并指定分区文件系统
在这里使用ext系列文件系统专用管理工具mke2fs进行格式化并指定文件系统类型。命令用法如下:
mke2fs [OPTION]… device
命令常用选项:
-t{ext2|ext3|ext4}
-b{1024|2048|4096} :块大小
-L‘LABEL‘
-j:相当于-t ext3
-i#:数据空间中每多少个字节创建一个inode,此大小不应该小于block大小
-N#:为数据空间创建多少个inode
-m#:为管理人员预留的空间占据的百分比
[[email protected] ~]#mke2fs -t ext4 -b 2048 -L "Primary_Partition" /dev/sda3 mke2fs 1.41.12(17-May-2010) Filesystemlabel=Primary_Partitio OS type: Linux Block size=2048(log=1) Fragment size=2048(log=1) Stride=0 blocks,Stripe width=0 blocks 655360 inodes,5241786 blocks 262089 blocks(5.00%) reserved for the super user First data block=0 Maximum filesystemblocks=542113792 320 block groups 16384 blocks pergroup, 16384 fragments per group 2048 inodes pergroup Superblock backupsstored on blocks: 16384, 49152, 81920, 114688, 147456,409600, 442368, 802816, 1327104, 2048000, 3981312 Writing inodetables: done Creating journal(32768 blocks): done Writing superblocksand filesystem accounting information: done This filesystem willbe automatically checked every 37 mounts or 180 days, whichevercomes first. Use tune2fs -c or -i tooverride. [[email protected] ~]#mke2fs -t ext4 -b 2048 -L "Logical_Partition" /dev/sda5 结果省略...
可以用命令blkid查看块设备属性信息查看。用法如下:
blkid [OPTION]...[DEVICE]
-UUUID:根据指定的UUID来查找对应的设备
-LLABEL:根据指定的LABEL来查找对应的设备
命令结果如下:
[[email protected] ~]#blkid /dev/sda3 /dev/sda3:LABEL="Primary_Partitio"UUID="4f0572f3-64a4-4b19-bc4c-eb5df4644741" TYPE="ext4" [[email protected] ~]#blkid /dev/sda5 /dev/sda5:LABEL="Logical_Partitio"UUID="208ef72f-706e-4888-9655-32a91ecb18a2" TYPE="ext4"
9、挂载分区
mount基本用法为:mount [OPTION] DEVICE DIR
DEVICE:指明要挂载的设备,可以使设备文件,可以用卷标 -L ‘LABEL‘,UUID :-U ‘UUID‘,
或者伪文件系统名称。
DIR:为挂载目录,必须为已存在目录,且目录原有文件在挂载完成后会被临时隐藏,
建议使用空目录
[[email protected] ~]# mkdir /Prim_test /Logi_test #新建两个目录当作挂载点 [[email protected] ~]#mount /dev/sda3 /Prim_test/ [[email protected] ~]#mount /dev/sda5 /Logi_test
[[email protected] ~]# df -l # 查看挂载项 Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 14987656 667824 13551832 5% / tmpfs 502176 0 502176 0% /dev/shm /dev/sda3 10252772 12308 9716286 1% /Prim_test /dev/sda5 10259072 12308 9722244 1% /Logi_test
[[email protected] ~]# ls /Prim_test/ # 挂载目录出现lost+found表明挂载已经成功 lost+found [[email protected] ~]#ls /Logi_test/ lost+found
[[email protected] ~]# cp /etc/fstab /Prim_test/ # 复制一个文件到挂载目录里,若能正常打开,则再次确认挂载成功 [[email protected] ~]#cat /Prim_test/fstab # # /etc/fstab # Created byanaconda on Tue Aug 25 18:43:53 20 (文档下面内容省略...)
10、配置分区开机自动挂载
编辑/etc/fstab配置文件,添加注释的两行内容
[[email protected] ~]#vim /etc/fstab # # /etc/fstab # Created byanaconda on Tue Aug 25 18:43:53 2015 # # Accessiblefilesystems, by reference, are maintained under ‘/dev/disk‘ # See man pagesfstab(5), findfs(8), mount(8) and/or blkid(8) for more info # UUID=915ff827-bd8e-4b9c-b804-a8bb73441c7a/ ext4 defaults 1 1 UUID=278e1b2d-05e7-4c58-bd9e-99740bdee416swap swap defaults 0 0 UUID=4f0572f3-64a4-4b19-bc4c-eb5df4644741 /Prim_test ext4 defaults 0 0 #挂载/dev/sda3 UUID=208ef72f-706e-4888-9655-32a91ecb18a2 /Logi_test ext4 defaults 0 0 #挂载/dev/sda5 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0
关于/etc/fstab配置文件各字段的解释如下:
1、需要挂载的设备或伪文件系统
可以为设备文件名称、LABEL(LABEL="")、UUID(UUID="")、伪文件系统名称
(proc,sysfs),建议用UUID,可以唯一标识设备,UUID不容易混乱冲突。
2、挂载点
为事先存在的目录
3、文件系统类型
4、转储频率:
0:不做备份;1:每天转储;2:每隔一天转储。
5、自检次序
0:不自检;1:首先自检;一般只有rootfs才用1。
三、一些扩展管理命令
tune2fs:重新设定ext系统文件系统可调整参数的值
tune2fs [OPTION]... DEVICE
常用选项:
-l:查看指定文件系统超级块信息,superblock
-L"LABEL":修改卷标
-m#: 预留给管理员的空间百分比
-j:将ext2升级为ext3
-O:文件系统属性启用或禁用
-o:调整文件系统的默认挂载选项
-UUUID:修改UUID号
dumpe2fs:显示设备文件系统的超级块和块组信息
dumpe2fs [OPTION]… DEVICE
-h:只查看超级块信息,不显示块组信息
不加选项显示超级快和块组信息
mkswap:创建交换分区
fsck:检查和修复文件系统
用法如下:
fsck.FS_TYPE device
fsck [OPTION] device
-t:指定文件系统类型
-a:自动修复错误
-r:交互式修复错误
注意:若指定FS_TYPE,则一定要与分区上已经存在文件类型相同;
总结:磁盘分区可以用fdisk工具进行分区,和指定分区ID(根据实际需要),切记w保存后退 出。用partx命令通知内核重新识别读取更改后的分区,再用mke2fs命令进行格式化和设定文件系统类型,并设置一些参数,如块大小,卷标,给管理员保留空间所占块数百分比等等。mount挂载分区,测试是否挂载正常。若要开机挂载则在/etc/fstab配置文件中添加相关项。
除了磁盘分区用到的一些命令外,还有一些常用的磁盘管理命令,如查看块设备信息blkid,重新设定ext文件系统参数tune2fs, 显示文件系统超级快和块组信息dumpe2fs, 文件系统和检查命令fsck,等等。