磁盘和文件系统管理
磁盘和文件系统管理(一)
1.管理磁盘及分区
1.1检测并确认新磁盘
vfdisk命令
■ 格式:fdisk -l [磁盘设备]
[root@localhost ~] # fdisk -l Disk /dev/sda : 64.4 GB, 64424509440 bytes 255 heads, 63 sectors/track, 7832 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 13 104391 83 Linux /dev/sda2 14 7832 62806117+ 8e Linux LVM Disk /dev/sdb: 85.8 GB, 85899345920 bytes 255 heads, 63 sectors/track, 10443 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk /dev/sdb doesn't contain a valid partition table <==新磁盘未包含有效的分区表 |
对于已有的分区,将通过列表的方式输出以下信息:
➣ Device:分区的设备文件名称。
➣ Boot:是否是引导分区,是则有“*”标识。
➣ Start:该分区在硬盘中的起始位置(柱面数)。
➣ End:该分区在硬盘中的结束位置(柱面数)。
➣ Blocks:分区的大小,以Blocks(块)为单位,默认的块大小为1024字节。
➣ Id:分区类型的ID标记号,对于EXT3分区为83,LVM分区为8e。
➣ System:分区类型
注意分区类型的概念在windows中是没有的,分区类型与文件系统类型应一致,这样管理磁盘文件系统时才不容易引起混乱。
1.2 规划硬盘中的分区
vfdisk命令
■ 用途:在交互式的操作环境中管理磁盘分区
■ 格式:fdisk [磁盘设备]
v交互模式中的常用指令
■ m:查看操作指令的帮助信息
■ p:列表查看分区信息
■ n:新建分区
■ d:删除分区
■ t:变更分区类型
■ w:保存分区设置并退出
■ q:放弃分区设置并退出
[root@localhost ~] # fdisk /dev/sdb Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) Command (m for help): <==输入特定的分区操作指令 |
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) |
#在非交互式模式中可以执行“fdisk -l /dev/sdb”查看磁盘sdb的分区情况,而在进入“fdisk /dev/sdb”交互式模式后中只需要按p键即可(因为是新的磁盘,所以暂时没有分区信息)
Command (m for help): p 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: 0xa8c7f783 Device Boot Start End Blocks Id System |
v硬盘规划示例
■ 为主机新增一块20GB的SCSI硬盘
■ 对该硬盘进行分区:
● 划分2个主分区,各2GB,剩余空间作为扩展分区
● 在扩展分区中建立2个逻辑分区,容量分别为2GB、10GB
● 将第1个逻辑分区的类型改为swap
● 确认分区设置情况,保存退出
■ 使用partprobe探测硬盘分区的变化
#需要注意的是,由于硬盘中的主分区数目只有4个,因此主分区和扩展分区的序号也就限制在1~4,而逻辑分区从5开始。
1) 下面开始创建两个主分区,,每个大小是2G。首先创建第一个主分区(dev/sdb1)
Command (m for help): n <==开始创建第1个主分区 Command action e extended p primary partition (1-4) p <==选择创建的为主分区 Partition number (1-4): 1 <==设置第1个主分区的编号为sdb1 First cylinder (1-2610, default 1): <==直接回车接受默认值 Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +2000M <==指定大小为2G 2) 按照类似的步骤创建第二个主分区(dev/sdb2)
Command (m for help): n <==开始创建第2个主分区 Command action e extended p primary partition (1-4) p <==选择创建的为主分区 Partition number (1-4): 2 <==设置第2个主分区的编号为sdb2 First cylinder (257-2610, default 257): <==直接回车接受默认值 Using default value 257 Last cylinder, +cylinders or +size{K,M,G} (257-2610, default 2610): +2000M <==指定大小为2G Command (m for help): p <==查看分区情况 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: 0x21e5b84e Device Boot Start End Blocks Id System /dev/sdb1 1 256 2056288+ 83 Linux /dev/sdb2 257 512 2056320 83 Linux |
3) 接下来开始创建扩展分区,将剩余的所有容量都划为扩展分区(sdb4)
Command (m for help):
n
Command action
e extended
p primary partition (1-4)
e <==选择创建的为扩展分区
Partition number (1-4):
4 <==选择4作为扩展分区的编号“sdb4”
First cylinder (513-2610, default 513):
Using default value 513
Last cylinder, +cylinders or +size{K,M,G} (513-2610, default 2610):
<==不指定容量代表使用剩余的所有空间
Using default value 2610
4) 接下来在扩展分区中建立第1个逻辑分区(dev/sdb5)
Command (m for help):
n
Command action
l logical (5 or over)
p primary partition (1-4)
l <==选择创建为逻辑分区
First cylinder (513-2610, default 513):
Using default value 513
Last cylinder, +cylinders or +size{K,M,G} (513-2610, default 2610):
+2000M 指定第1个逻辑分区的大小为2G
5) 按照类似的步骤创建第2个逻辑分区(dev/sdb6),指定大小为10G,然后输入“p‘命令查看分区情况
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l
First cylinder (769-2610, default 769):
Using default value 769
Last cylinder, +cylinders or +size{K,M,G} (769-2610, default 2610):
+10000M <==指定第2个逻辑分区的大小为10G
Command (m for help):
p
<==查看分区情况
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: 0x21e5b84e
Device Boot Start End Blocks Id System
/dev/sdb1 1 256 2056288+ 83 Linux
/dev/sdb2 257 512 2056320 83 Linux
/dev/sdb4 513 2610 16852185 5 Extended
/dev/sdb5 513 768 2056288+ 83 Linux
/dev/sdb6 769 2044 10249438+ 83 Linux
6) 删除已经创建的逻辑分区/dev/sdb6
Command (m for help): d <==进入删除指定分区的操作 Partition number (1-6): 6 <==选择需要删除的分区序号 |
7)更改分区的类型,将第1个逻辑分区/dev/sdb5变更为Swap交换分区(新建分区的默认文件系统类型为EXT3,EXT3文件系统的ID号为83、SWAP文件系统的ID号为82)
Command (m for help): t Partition number (1-5): 5 Hex code ( type L to list codes): 82 Changed system type of partition 5 to 82 (Linux swap / Solaris) Command (m for help): p 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: 0x21e5b84e Device Boot Start End Blocks Id System /dev/sdb1 1 256 2056288+ 83 Linux /dev/sdb2 257 512 2056320 83 Linux /dev/sdb4 513 2610 16852185 5 Extended /dev/sdb5 513 768 2056288+ 82 Linux swap / Solaris <==已经将分区类型变更为交换分区 |
8)使用”w“和”p“命令退出fdisk分区工具
Command (m for help): w <==保存分区操作并退出
Command (m for help): q <==不保存(放弃)分区操作并退出 |
9)使用partprobe命令重新检测新的分区表情况,或者使用”reboot“命令重启系统生效
[root@sky ~] # partprobe /dev/sdb 或者 [root@sky ~] # reboot |
2. 管理文件系统
2.1 创建文件系统
将新硬盘分好区以后,还需要对分区进行格式化(即创建文件系统),并挂载到Linux系统中的指定目录下,然后才能用于存储文件、目录等数据
首先来看一下如何格式化一个分区,在Linux系统中,格式化分区的主要命令工具为mkfs,通过实际操作演示格式化ext3文件系统的过程。
vmkfs命令
■ 用途:Make Filesystem,创建文件系统(格式化)
■ 格式:mkfs -t 文件系统类型 分区设备
[root@localhost ~] # ls /sbin/mkfs* /sbin/mkfs /sbin/mkfs.ext2 /sbin/mkfs.msdos /sbin/mkfs.cramfs /sbin/mkfs.ext3 /sbin/mkfs.vfat [root@localhost ~] # mkfs -t ext3 /dev/sdb1 <==作为其他几个分区命令的前端工具,通过“-t ...”选项指定文件系统类型 |
vmkswap命令
■ 用途:make Swap,创建交换文件系统
■ 格式:mkswap 分区设备
[root@localhost ~] # mkswap /dev/sdb5 <==将分区/dev/sdb5创建为交换分区 Setting up swapspace version 1, size = 2006929 Kb [root@localhost ~] # cat /proc/meminfo | grep "SwapTotal <==查看总交换分区的大小 SwapTotal: 2097144 kB [root@localhost ~] # swapon /dev/sdb5 <==启用交换分区/dev/sdb5 [root@localhost ~] # cat /proc/meminfo | grep "SwapTotal <==确认交换分区大小已增加 SwapTotal: 4057032 kB [root@localhost ~] # swapoff /dev/sdb5 <==停用交换分区/dev/sdb5 |
#如果希望系统下次启动时自动加载新建的交换分区,那么必须修改/etc/fstab文件:
[root@sky ~] # vim /etc/fstab /dev/sdb5 swap swap defaults 0 0 |
2.2 挂载、卸载文件系统
vmount命令
■ 用途:挂载文件系统、ISO镜像到指定文件夹
■ 格式:mount [ -t 类型 ] 存储设备 挂载点目录
mount -o loop ISO镜像文件 挂载点目录
vumount命令
■ 用途:卸载已挂载的文件系统
■ 格式:umount 存储设备位置
umount 挂载点目录
v硬盘分区挂载、卸载示例
■ 建立挂载点目录:/mailbox
■ 挂载分区设备:/dev/sdb1
■ 访问分区设备:
● 挂载点目录/mailbox中创建文件进行测试
● 查看/mailbox目录中的内容
■ 查看磁盘挂载情况(mount)
■ 卸载分区设备:/dev/sdb1
[root@localhost ~] # mkdir /mailbox <==建立挂载点目录
[root@localhost ~] # mount <==查看挂载情况 /dev/mapper/vg_sky-lv_root on / type ext4 (rw) …… proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) /dev/sr0 on /mailbox type iso9660 (ro) |
v卸载文件系统
[root@localhost ~] # umount /mailbox <==通过挂载目录卸载 [root@localhost ~] # umount /dev/cdrom <==通过设备文件卸载 |
v设置文件系统的自动挂载
■ /etc/fstab配置文件:包含了需要开机后自动挂载的文件系统记录
[root@localhost ~]
# vi /etc/fstab
/dev/VolGroup00/LogVol00 / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
devpts /dev/pts devpts gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs defaults 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
/dev/VolGroup00/LogVol01 swap swap defaults 0 0
系统中的“/etc/fstab”文件可以视为mount命令的配置文件
第一字段:设备位置
第二字段:挂载点
第三字段:文件系统类型,如ext3、swap等
第四字段:挂载参数,即mount命令“-o”选项后可使用的参数,如defaults、rw等
第五字段:表示文件系统是否需要dump备份(dump是一个备份工具),一般设为1时表示需要,设为0时将被dump所忽略
第六字段:该数字用于决定在系统启动时进行磁盘检查的顺序,0不进行检查,1优先,2其次。对于根分区应设为1,其它分区设为2
#设置自动挂载示例
每次重新开机后,能够自动将/dev/sdb1分区挂载到/mailbox目录
[root@localhost ~] # vi /etc/fstab <==设置开机自动挂载 /dev/sdb1 /mailbox ext3 default 0 0 [root@localhost ~] # mount /dev/sdb1 /mailbox <==手动挂载sdb1分区 [root@localhost ~] # mount | tail -1 /dev/sdb1 on /mailbox type ext3 (rw) [root@localhost ~] # umount /mailbox <==卸载/mailbox挂载 |
查看磁盘使用情况
vdf命令
■ 格式:df [选项] [文件]
[root@sky ~]
# df -hT
文件系统 类型 容量 已用 可用 已用%% 挂载点
/dev/mapper/vg_sky-lv_root
ext4 18G 3.8G 13G 23% /tmpfs tmpfs 491M 72K 491M 1% /dev/shm
/dev/sda1 ext4 485M 34M 427M 8% /boot
/dev/sdb1 ext3 2.0G 35M 1.8G 2% /mailbox
磁盘和文件系统管理(二)
1. LVM逻辑卷管理
1.1 LVM概述
vLogical Volume Manager,逻辑卷管理
■ 作用:动态调整磁盘容量,从而提高磁盘管理的灵活性
■ 需要注意:
● /boot分区用于存放引导文件,不能基于LVM创建
v图形界面管理工具
■ system-config-lvm
vLVM机制的基本概念
■ PV(Physical Volume,物理卷)
● 整个硬盘,或使用fdisk等工具建立的普通分区
● 包括许多默认4MB大小的PE(Physical Extent,基本单元)
■ VG(Volume Group,卷组)
● 一个或多个物理卷组合而成的整体
■ LV(Logical Volume,逻辑卷)
● 从卷组中分割出的一块空间,用于建立文件系统

1)物理卷,以/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1 为例
2)卷组,画一个矩形框圈住 /dev/sdb1、/dev/sdc1、/dev/sdd1 这3个物理卷作为一个整体,即示意卷组
3)逻辑卷,擦去矩形框内的3个物理卷名(表示磁盘底层布局是透明的,划分逻辑卷时无需知道具体由哪些物理卷组成),从卷组矩形框划出2块小空间,作为2个独立的逻辑卷
1.2 LVM的管理命令

v主要命令的语法
■ pvcreate 设备名
■ vgcreate 卷组名 物理卷名1 物理卷名2
■ lvcreate -L 大小 -n 逻辑卷名 卷组名
■ lvextend -L +大小 /dev/卷组名/逻辑卷名
LVM应用示例
v需求描述
■ 公司准备在Internet中搭建邮件服务器(RHEL5系统平台),面向全国各地的员工及部分VIP客户提供电子邮箱空间。由于用户数量众多,邮件存储需要大量的空间,考虑到动态扩容的需要,计划增加两块SCSI硬盘并构建LVM逻辑卷(挂载到“/mailbox”目录下)专门用于存放邮件数据
v推荐步骤:
■ PV → VG → LV → 格式化 → 挂载使用文件系统

创建LVM文件系统的基本过程(3个步骤):先PV,再VG,最后LV:
1. 每块硬盘均规划为1个主分区,并转换为物理卷
2. 组合这两个物理卷,创建名为mail_store的卷组
3. 在该卷组中创建名为mail的逻辑卷
4. 创建ext3文件系统,并挂载到/mail目录
创建物理卷——pvcreate
v1. 转化物理卷
■ 使用fdisk命令规划两个分区,将类型设置为“8e”
● /dev/sdb1、/dev/sdc1
■ 使用pvcreate命令转换上述分区为物理卷
[root@localhost ~] # fdisk -l /dev/sdb /dev/sdc | grep "LVM" <==正确分区结果 /dev/sdb1 1 9660 77593918+ 8e Linux LVM /dev/sdc1 1 9660 77593918+ 8e Linux LVM |
[root@localhost ~] # pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created [root@localhost ~] # pvcreate /dev/sdc1 Physical volume "/dev/sdc1" successfully created |
创建卷组——vgcreate
v2. 创建卷组
■ 使用vgcreate命令创建卷组mail_store
● 包括物理卷:/dec/sdb1、/dev/sdc1
|
创建逻辑卷——lvcreate
v3. 创建逻辑卷
■ 使用lvcreate命令创建逻辑卷 mail
● 从卷组mail_store上划出60GB空间
■ 使用mkfs命令创建ext3文件系统
[root@localhost ~] # lvcreate -L 60G -n mail mail_store <==在 “mail_store”卷组中创建一个名为mail的逻辑卷,大小为60G /dev/cdrom : open failed: Read -only file system Logical volume "mail" created [root@localhost ~] # mkfs -t ext3 /dev/mail_store/mail <==格式化mail逻辑卷 …… |
#按上述操作创建逻辑卷后,系统会自动建立”/dev/卷组名/逻辑卷名“的逻辑卷设备文件,即 /dev/mail_store/mail
v为逻辑卷扩容
■ 使用lvextend命令为逻辑卷 mail扩充容量
● 从卷组 mail_store 上再划出10GB给逻辑卷mail
■ 使用resize2fs命令更新系统识别的文件系统大小
[root@localhost ~] # lvextend -L +10G /dev/mail_store/mail [root@localhost ~] # resize2fs /dev/mail_store/mail |
2. 设置磁盘配额
2.1 磁盘配额概述
v实现磁盘限额的条件
■ 需要Linux内核支持
■ 安装quota软件包
vLinux磁盘限额的特点
作用范围:针对指定的文件系统(分区)
■ 限制对象:用户帐号、组帐号
■ 限制类型:
● 磁盘容量(默认单位为KB)
● 文件数量
■ 限制方法:软限制、硬限制
2.2磁盘配额管理
启用磁盘配额支持
v启用文件系统的配额支持
■ 添加usrquota、grpquota挂载参数
[root@localhost ~] # vi /etc/fstab <==修改mail逻辑卷的挂载配置 /dev/sdb1 /mailbox ext3 default,usrquota,grpquota 0 0 [root@localhost ~] # mount /mailbox [root@localhost ~] # mount | tail -1 /dev/sdb1 on /mailbox type ext3 (rw,usrquota,grpquota) |
v检测磁盘配额并创建配额文件
■ 使用quotacheck命令创建配额文件
● quotacheck -ugcv 文件系统
● quotacheck -augcv
-u、-g:检测用户、组配额
-c:创建配额数据文件
-v:显示执行过程信息
-a:检测所有可用的分区
[root@localhost ~]
# quotacheck -ugcv /dev/sdb1
quotacheck: Scanning /dev/sdb1 [/mailbox]
……
done
[root@localhost ~]
# ls -l /mailbox/aquota.*
-
rw
------- 1 root root 6144 09-14 12:04 /mailbox/aquota.
group
<==组配额文件
-rw
--
----- 1 root root 6144 09-14 12:04 /mailbox/aquota.user <==用户配额文件
v编辑用户和组帐号的配额设置
■ 使用edquota命令编辑配额设置
● edquota -u 用户名
● edquota -g 组名
[root@localhost ~]
# edquota -u zhangsan <==对用户张三进行配额设置
Disk quotas for user zhangsan (uid 501):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 0
80000 100000
0
40 50
第3列:磁盘容量软限制
第4列:磁盘容量硬限制
第6列:文件个数软限制
第7列:文件个数硬限制
[root@localhost ~] # edquota -g users <==对user组进行配额设置 Disk quotas for group users (gid 100): Filesystem blocks soft hard inodes soft hard /dev/sdb1 252 0 1024000 39 0 0 |
v启用、关闭文件系统的配额功能
■ 使用quotaon、quotaoff命令
[root@localhost ~] # quotaon -ugv /mailbox <==启用 mailbox逻辑卷配额限制/dev/sdb1 [/mailbox]: group quotas turned on /dev/sdb1 [/mailbox]: user quotas turned on [root@localhost ~] # quotaoff -ugv /mailbox <==关闭 mailbox逻辑卷配额限制/dev/sdb1 [/mailbox]: group quotas turned off /dev/sdb1 [/mailbox]: user quotas turned off |
v验证磁盘配额功能
■ 必须切换到设置配额的分区(挂载目录)
■ 创建指定数量的文件:使用touch命令,或cp命令
■ 创建指定容量的文件:使用dd命令,或cp命令
[zhangsan@mail ~]$ cd /mailbox [zhangsan@mail mailbox]$ dd if=/dev/zero of=myfile bs=1M count=120 sdb1: warning, user block quota exceeded. sdb1: write failed, user block limit reached. dd: 写入 “myfile”: 超出磁盘限额 …… |
v查看配额使用情况
■ 侧重用户、组帐号角度:使用quota命令
● quota -u 用户名
● quota -g 组名
■ 侧重文件系统角度:使用repquota
● repquota 文件系统
● repquota -a
[root@localhost ~] # quota -u zhangsan Disk quotas for user zhangsan (uid 515): Filesystem blocks quota limit grace files quota limit grace /dev/sdb1 100000* 80000 100000 1 40 50 [root@localhost ~] # quota -g users Disk quotas for group users (gid 10): none |
[root@localhost ~] # repquota /mailbox *** Report for user quotas on device /dev/sdb1 Block grace time: 3days; Inode grace time: 3days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 176200 0 0 4 0 0 zhangsan +- 100000 80000 100000 2days 1 40 50 |