磁盘管理
df命令
df命令用于显示指定磁盘分区上的文件系统的磁盘空间使用情况。可以用来查看磁盘空间使用情况。
语法
$ df [-选项]
[root@lwz ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs tmpfs 2.0G 201M 1.8G 11% /run
tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/mapper/centos-root ext4 41G 2.3G 37G 6% /
/dev/xvda1 ext4 190M 108M 69M 62% /boot
tmpfs tmpfs 394M 0 394M 0% /run/user/0
选项
-i:查看inodes状态;
如已使用100%,即使磁盘还有空间也会提示磁盘空间已满。-T:显示文件系统类型;-h:以GB、MB、KB为单位,提高信息的可读性;-m:以MB为单位。不常用,一般用-h;
du命令
du命令也是查看使用空间的,但是与df命令不同的是,du命令是对文件和目录磁盘使用的空间的查看,而不是文件系统磁盘使用空间的查看。
语法
$ du [-选项] 文件或目录
[root@lwz ~]# du -h /etc/shadow
4.0K /etc/shadow
选项
-a:显示目录中所有文件大小;-h:以GB、MB、KB为单位,提高信息的可读性;-s:显示目录中所有文件大小的总和。
磁盘分区fdisk
fdisk磁盘分区和查看磁盘分区状态信息;
只能划分小于2T的分区。
语法
$ fdisk [-选项] [设备]
# 不加选项会进入分区模式;
# 加 -l 选项会列出所有分区;
fdisk分区模式中常用命令:
m:列出常用命令;n:添加新分区;p:打印分区表;w:保存并退出;q:不保存退出;d:删除分区;l:列出分区类型;t:修改分区类型;
示例
对/dev/sdb进行分区:
[root@lwz ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。- >
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x47a75227 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):+2G
分区 1 已设置为 Linux 类型,大小设为 2 GiB
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
分区号 (2-4,默认 2):
起始 扇区 (4196352-20971519,默认为 4196352):
将使用默认值 4196352
Last 扇区, +扇区 or +size{K,M,G} (4196352-20971519,默认为 20971519):+2G
分区 2 已设置为 Linux 类型,大小设为 2 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x316c2e28
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 8390655 2097152 83 Linux
命令(输入 m 获取帮助):n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): p
分区号 (3,4,默认 3):+1G
分区号 (3,4,默认 3):
起始 扇区 (8390656-20971519,默认为 8390656):
将使用默认值 8390656
Last 扇区, +扇区 or +size{K,M,G} (8390656-20971519,默认为 20971519):+1G
分区 3 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):n
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): e
已选择分区 4
起始 扇区 (10487808-20971519,默认为 10487808):
将使用默认值 10487808
Last 扇区, +扇区 or +size{K,M,G} (10487808-20971519,默认为 20971519):
将使用默认值 20971519
分区 4 已设置为 Extended 类型,大小设为 5 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x316c2e28
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 4196351 2097152 83 Linux
/dev/sdb2 4196352 8390655 2097152 83 Linux
/dev/sdb3 8390656 10487807 1048576 83 Linux
/dev/sdb4 10487808 20971519 5241856 5 Extended
命令(输入 m 获取帮助):
命令(输入 m 获取帮助):d
分区号 (1-4,默认 4):
分区 4 已删除
命令(输入 m 获取帮助):q
磁盘格式化
查看文件系统filesystems:
[root@lwz ~]# cat /etc/filesystems
ext4
ext3
ext2
nodev proc
nodev devpts
iso9660
vfat
hfs
hfsplus
*
# 使用的是centos8系统
[root@lwz ~]# uname -a
Linux lwz 4.18.0-80.el8.x86_64 #1 SMP Tue Jun 4 09:19:46 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
说明:
xfs:centos7、8系统默认文件格式;
ext4、ext3、ext2:旧版本centos的默认文件格式;
格式化命令mke2fs
语法
mke2fs:创建ext2、ext3、ext4文件系统;
$ mke2fs -t 文件类型 [-选项] 设备名
mkfs.ext4:等于mke2fs -t ext4;
$ mkfs.ext4 [-选项] 设备名
mkfs.xfs:创建xfs文件系统;
$ mkfs.xfs [-选项] 设备名
选项
-t:指定文件系统类型;-b:指定块大小;-m:指定分区预留空间大小-i:指定inode大小
示例
[root@lwz ~]# mke2fs -t ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621184 blocks
131059 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@lwz ~]# mke2fs -t ext4 -b 1024 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 10484736 blocks
524236 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=44040192
1280 block groups
8192 blocks per group, 8192 fragments per group
512 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409, 663553,
1024001, 1990657, 2809857, 5120001, 5971969
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@lwz ~]# mke2fs -i 8192 -t ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 2621184 blocks
131059 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
[root@lwz ~]# mke2fs -m 0.1 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621184 blocks
2621 blocks (0.10%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2684354560
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: 完成
正在写入inode表: 完成
Writing superblocks and filesystem accounting information: 完成
磁盘挂载和卸载
挂载mount
mount命令单独使用,会查看当前挂载分区,分区文件系统的类型。
挂载磁盘/dev/sbd到/mnt目录下。
$ mount /dev/sdb /mnt
卸载umount
$ umount /dev/sdb
永久挂载
$ vim /etc/fstab
/dev/sdb /mnt ext4 defaults 0 0
说明:
/dev/sdb:磁盘分区,也可以是分区标识UUID;/mnt:挂载点;ext4:文件系统类型;defaults:mount的挂载参数,默认defaults;表示按照大多数文件系统默认值挂载;包含(rw、suid、dev、exec、auto、nouser、async)async:磁盘和内存不同步;系统每隔一段时间就会把内存数据写入磁盘中。sync:磁盘和内存实时同步;auto:开机自动挂载;noauto:不开机自动挂载;0:是否被dump备份;0表示不备份,1表示备份;默认为0;0:开机时是否检测磁盘;0表示不检测,1、2表示检测;默认为0;
lvm
安装lvm需要的包:
$ yum install -y lvm
创建lvm格式分区
将sdb分成三个区,格式为lvm:
[root@lwz ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0xc9721557 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xc9721557
设备 Boot Start End Blocks Id System
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-20971519,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-20971519,默认为 20971519):+1G
分区 1 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xc9721557
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 8e Linux LVM
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
分区号 (2-4,默认 2):
起始 扇区 (2099200-20971519,默认为 2099200):
将使用默认值 2099200
Last 扇区, +扇区 or +size{K,M,G} (2099200-20971519,默认为 20971519):+1G
分区 2 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):t
分区号 (1,2,默认 2):
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): p
分区号 (3,4,默认 3):
起始 扇区 (4196352-20971519,默认为 4196352):
将使用默认值 4196352
Last 扇区, +扇区 or +size{K,M,G} (4196352-20971519,默认为 20971519):+1G
分区 3 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:10.7 GB, 10737418240 字节,20971520 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xc9721557
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 8e Linux LVM
/dev/sdb2 2099200 4196351 1048576 8e Linux LVM
/dev/sdb3 4196352 6293503 1048576 8e Linux LVM
命令(输入 m 获取帮助):
保存
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
语法及选项
pv:
pvscan # 扫描
pvcreate 分区名 # 新建
pvdisplay # pv详细信息
pvremove 物理卷名 # 删除
vg:
vgscan # 扫描
vgcreate 卷组 分区名 # 新建
vgdisplay # vg详细信息
vgremove 卷组 # 删除
vgextend 卷组 物理卷 # 向卷组中添加物理卷
vgreduce 卷组 物理卷 # 从卷组中删除物理卷
vgrename 旧组名 新组名 # 改名
lv:
lvscan # 扫描逻辑卷
lvcreate [选项] 逻辑卷 卷组 # 用于创建LVM的逻辑卷
选项:
-L:指定逻辑卷的大小,“+ -”增加或减少,单位为“kKmMgGtT”字节;
-l:指定逻辑卷的大小(LE数)。`-l 100%free`:将vg剩余空间全部给予。
lvextend [选项] 逻辑卷 # 扩展逻辑卷空间
-选项同上
lvreduce [选项] 逻辑卷 # 收缩逻辑卷空间
-选项同上
lvremove 逻辑卷 # 删除指定LVM逻辑卷
lvresize [选项] 逻辑卷 # 调整逻辑卷空间大小
-选项同上
lvdisplay # 显示逻辑卷属性
创建物理卷pvcreate
创建pv
$ sudo pvcreate /dev/sdb1
$ sudo pvcreate /dev/sdb2
$ sudo pvcreate /dev/sdb3
# 查看物理卷信息
$ sudo pvdisplay
创建卷组vgcreate
将sdb1、sdb2、sdb3创建一个名为vg01的卷组
$ sudo vgcreate vg01 /dev/sdb1 /dev/sdb2 /dev/sdb3
# 查看卷组信息
$ sudo vgdisplay
创建逻辑卷lvcreate
创建一个名为lv01的逻辑卷,大小为10G。并格式化
$ sudo lvcreate -L 10G -n lv01 vg01
# 格式化
$ sudo mkfs.ext4 /dev/vg01/lv01
# 查看逻辑卷信息
$ sudo lvdisplay
挂载逻辑卷
将lv01挂载到/mnt
$ sudo mount /dev/vg01/lv01 /mnt
永久挂载逻辑卷
$ sudo echo /dev/vg01/lv01 /mnt ext4 defaults 0 0 >> /etc/fstab
扩容逻辑卷
如果vg中有剩余的空间:
# 重新设置卷大小
$ sudo lvresize -L 20G /dev/vg01/lv01
# 检查磁盘错误,错误无所谓,下一条命令更新成功即可
$ sudo e2fsck -f /dev/vg01/lv01
# 更新逻辑卷信息
$ sudo resize2fs /dev/vg01/lv01 # ext4更新命令
$ sudo xfs_growfs /dev/vg01/lv01 # xfs更新命令
vg中没有剩余空间,先扩容vg再扩容lv:
# 1.首先新增一块硬盘,例如增加了一块100G的xvdb
# 2.重复上述的格式分区操作,将xvdb分区为lvm,创建pv
# 3.将新建的pv(xvdb1)加入vg组(vg01)
$ sudo vgextend vg01 /dev/xvdb1
# 4.将vg中新增的空间,扩容给lv
$ sudo lvextend -l +100%free /dev/vg01/lv01
# 5.更新lv卷信息
$ sudo resize2fs /dev/vg01/lv01 # ext4更新命令
$ sudo xfs_growfs /dev/vg01/lv01 # xfs更新命令
# 再次查看磁盘信息
$ sudo df -Th
缩减逻辑卷
$ sudo resize2fs /dev/vg01/lv01 10G # 更新逻辑卷的文件系统大小为10G
$ sudo lvresize -L 10G /dev/vg01/lv01 # 更新逻辑卷大小为10G
扩展内容
dd命令
# 测试写入速度
$ dd if=/dev/zero of=/tmp/test1.out bs=1024 count=400000
$ dd if=/dev/zero of=/tmp/test2.out bs=1024 count=400000 conv=fsync
$ dd if=/dev/zero of=/tmp/test3.out bs=1024 count=400000 conv=fdatasync
# 测试读取速度
$ dd if=/tmp/test1.out of=/dev/null
dd命令说明:
if=:指定输入文件,这里用/dev/zero表示以零填充of=:指定输出文件,这里用/swapfile表示将文件输出到/swapfilebs=:指定块大小,这里用1024表示以字节为单位count=:指定块数量,这里用4096k表示以4096k*1024最终等于你指定的swapfile大小。或者用4M表示,最终执行的结果也是4GBconv=:指定转换方式,这里用fsync表示同步写入,fdatasync表示异步写入,主要为了避免操作系统“写缓存”干扰测试成绩。
raid磁盘阵列
raid磁盘阵列,是一种把多块硬盘(硬盘数量由raid级别决定)组合成单个硬盘(通常称为raid硬盘或raid卡)来提供冗余或增加吞吐量的一种技术。
raid级别:
| raid级别 | 性能 | 冗余能力 | 空间利用率 | 磁盘数量(块) |
|---|---|---|---|---|
| raid 0 | 读写提升 | 无 | 100% | >=2 |
| raid 1 | 读提升,写下降 | 有 | 50% | >=2 |
| raid 5 | 读写都提升 | 有 | (n-1)/n% | >=3 |
| raid 10 | 读写都提升 | 有 | 50% | >=4 |
| raid 01 | 读写都提升 | 有 | 50% | >=4 |
swap - 虚拟内存
扩容swap或者创建一个swap,并设置所需的大小,有两种方式可以实现。
例如,要创建一个大小为4GB的swapfilefallocate命令:
$ sudo fallocate -l 4G /swapfile
dd命令:
$ sudo dd if=/dev/zero of=/swapfile bs=1024 count=4096k
dd命令说明:
if=:指定输入文件,这里用/dev/zero表示以零填充of=:指定输出文件,这里用/swapfile表示将文件输出到/swapfilebs=:指定块大小,这里用1024表示以字节为单位count=:指定块数量,这里用4096k表示以4096k*1024最终等于你指定的swapfile大小。或者用4M表示,最终执行的结果也是4GB
注意:fallocate命令和dd命令都可以创建swapfile,但是fallocate命令会更快更方便。有时候fallocate命令不可用,这时可以使用dd命令代替。
设置swapfile的权限:
$ sudo chmod 600 /swapfile
使用以下命令将swapfile设置为swap区域:
$ sudo mkswap /swapfile
最后,启用swapfile:
$ sudo swapon /swapfile
现在,你的swapfile已经成功扩容了。你可以使用以下命令来验证swap是否已经启用:
$ sudo swapon --show
如果输出中包含/swapfile,则表示swap已经启用。
永久挂载新的swap:
$ sudo cp /etc/fstab /etc/fstab.bak
$ sudo bash -c 'echo "/swapfile none swap sw 0 0" >> /etc/fstab'
记住,修改swapfile大小可能会对系统性能产生影响,请提前备份,谨慎操作。
关闭swap:
# 关闭所有swap
$ sudo swapoff -a
# 关闭指定的swap
$ sudo swapoff /swapfile
删除swapfile:
$ sudo rm /swapfile