磁盘管理

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表示将文件输出到/swapfile

  • bs=:指定块大小,这里用1024表示以字节为单位

  • count=:指定块数量,这里用4096k表示以4096k*1024最终等于你指定的swapfile大小。或者用4M表示,最终执行的结果也是4GB

  • conv=:指定转换方式,这里用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的swapfile
fallocate命令:

$ sudo fallocate -l 4G /swapfile

dd命令:

$ sudo dd if=/dev/zero of=/swapfile bs=1024 count=4096k

dd命令说明:

  • if=:指定输入文件,这里用/dev/zero表示以零填充

  • of=:指定输出文件,这里用/swapfile表示将文件输出到/swapfile

  • bs=:指定块大小,这里用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