硬盘分区&管理软RAID
本文介绍了Linux硬盘分区管理的基本概念和操作,重点讲解了fdisk工具的使用方法。主要内容包括: 硬盘分区的六大作用:隔离系统文件、限制空间、隔离故障、创建交换分区、提高性能、定制文件系统等。 fdisk工具的使用: 查看分区表的两种方法 创建分区的详细步骤(包括选择分区类型、设置大小等) 删除分区的操作 非交互式管理方法(通过输入文件批量执行) wipefs工具的作用:清除磁盘分区表信息 文
Linux 硬盘分区管理
综合案例:文件系统空间不足
硬盘为什么要分区?
- 将操作系统文件与用户文件分隔开,避免应用数据太多撑满操作系统盘。
- 限制应用或用户的可用空间。
- 如果一个分区出现逻辑损坏,仅损坏该分区数据而不影响硬盘上其他分区。
- 用于创建交换分区。
- 限制磁盘空间使用,以提高诊断工具和备份镜像的性能。
- 便于定制文件系统,例如有的文件系统存放大量小文件,有的文件系统存放大量大文件。
fdisk 工具
fdisk 工具可用于管理采用 MBR 分区方案的磁盘,用户可以根据实际情况进行划分分区。
查看分区
fdisk工具大部分操作通过交互式完成,出了查看分区表。
DOS disklabel 指的硬盘管理方式是MBR。
我们使用上一章准备的一块硬盘/dev/sdb。
# 方法1:
[root@server ~ 16:39:54]# fdisk -l /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: DC285F96-F414-4FC8-A428-EEDA235DC885
# Start End Size Type Name
1 2048 4196351 2G Microsoft basic data01
2 4196352 6293503 1G Microsoft basic data02
# 方法2:
[root@server ~ 16:41:30]# fdisk /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: DC285F96-F414-4FC8-A428-EEDA235DC885
# Start End Size Type Name
1 2048 4196351 2G Microsoft basic data01
2 4196352 6293503 1G Microsoft basic data02
创建分区
[root@server ~ 16:44:13]# fdisk /dev/sdb
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
# 选择分区类型
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
# 直接回车,选择默认分区类型:primary
Select (default p): `回车`
Using default response p
# 直接回车,分区号,使用默认值1
Partition number (1-4, default 1):
# 直接回车,设置分区起始位置为:默认值2048扇区,也就是1M位置。
First sector (2048-41943039, default 2048):
Using default value 2048
# 设置分区结束位置,输入+2G,也就是起始位置之后2
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +5G
# 输入w,保存更改并退出
# 输入q,不保存更改并退出
Command (m for help): w
The partition table has been altered!
# 再次验证分区表变化
[root@server ~ 16:45:03]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 2G 0 lvm [SWAP]
└─centos-home 253:2 0 47G 0 lvm /home
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 2G 0 part
└─sdb2 8:18 0 5G 0 part
注意:如果此时分区表未生成,执行以下命令,通知kernel重新生成分区表。有时候重启系统才会生成最新分区表
# partprobe
删除分区
[root@server ~ 16:45:10]# fdisk /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):d
分区号 (1,2,默认 2):2
分区 2 已删除
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: DC285F96-F414-4FC8-A428-EEDA235DC885
# Start End Size Type Name
1 2048 4196351 2G Microsoft basic data01
非交互方式管理
示例1:创建一个分区
# 将要执行的fdisk命令行写入到一个文本文件
[root@server ~ 16:59:18]# vim fdisk-create.txt
n
p
1
2048
+2G
p
w
[root@server ~ 17:01:58]# fisk /dev/sdb < fdisk-create.txt
# 执行
[root@server ~ 17:03:12]# fdisk /dev/sdb < fdisk-create.txt
[root@server ~ 17:03:57]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 2G 0 lvm [SWAP]
└─centos-home 253:2 0 47G 0 lvm /home
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 2G 0 part
wipefs 工具
作用:清除磁盘分区表信息。
注意:数据无价,操作需谨慎,最好提前备份。
# 清除未挂载磁盘的分区表
[root@server ~ 17:07:41]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 2G 0 lvm [SWAP]
└─centos-home 253:2 0 47G 0 lvm /home
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 2G 0 part
sdc 8:32 0 200G 0 disk
└─sdc1 8:33 0 20G 0 part
sr0 11:0 1 4.4G 0 rom
[root@server ~ 17:07:53]# wipefs -a /dev/sdb
/dev/sdb:8 个字节已擦除,位置偏移为 0x00000200 (gpt):45 46 49 20 50 41 52 54
/dev/sdb:8 个字节已擦除,位置偏移为 0x4fffffe00 (gpt):45 46 49 20 50 41 52 54
/dev/sdb:2 个字节已擦除,位置偏移为 0x000001fe (PMBR):55 aa
/dev/sdb: calling ioclt to re-read partition table: 成功
[root@server ~ 17:08:08]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 99G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 2G 0 lvm [SWAP]
└─centos-home 253:2 0 47G 0 lvm /home
sdb 8:16 0 20G 0 disk
sdc 8:32 0 200G 0 disk
└─sdc1 8:33 0 20G 0 part
sr0 11:0 1 4.4G 0 rom
# 禁止使用 -f 强制清除分区表
# wipefs -fa /dev/sdb
parted 工具
parted 工具既可以管理采用MBR分区方案的磁盘,又可以管理采用GPT分区方案的磁盘。
parted 命令同时支持交互式操作和非交互式操作(编写脚本)。
我们先来看看交互式操作。
操作流程:
- 查看分区表。如果是未初始化硬盘,创建分区。
- 设置单位(MiB)
- 创建分区
- 调整分区大小
- 调整分区类型
- 删除分区
查看分区表
[root@server ~ 17:08:13]# parted /dev/sdb
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
错误: /dev/sdb: unrecognised disk label
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
设置单位
parted工具默认单位是MB(103K),设置为MiB(210KiB)
(parted) unit MiB
管理 MBR 磁盘
设置磁盘分区管理方案
(parted) print
错误: /dev/sdb: unrecognised disk label
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
# 输入mklabel或mktable设置磁盘分区管理方案
# 设置分区方案为msdos,也就是MBR,输入mklabel msdos
(parted) mklabel msdos
(parted) print
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
# 分区表已改成msdos
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system 标志
**注意:**parted命令所做更改立刻生效。
创建分区
# 创建分区,输入 mkpart
(parted) `mkpart`
# 设置分区类型,输入 primary
Partition type? primary/extended? `primary`
# 设置分区文件系统类型,输入 xfs,实际不生效,格式化文件系统仍需手动操作
File system type? [ext2]? `xfs`
# 设置分区起始位置,输入 1
Start? `1`
# 设置分区结束位置,输入 2049
End? `2049`
(parted) `print`
(parted) print
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system 标志
1 1049kB 2049MB 2048MB primary xfs
删除分区
# 1 代表分区号
(parted) rm 1
(parted) print
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system 标志
免交互操作
# 设置磁盘分区管理方案
[root@server ~ 17:16:29]# parted /dev/sdb mklabel msdos
警告: The existing disk label on /dev/sdb will be destroyed and all data on
this disk will be lost. Do you want to continue?
是/Yes/否/No? yes
信息: You may need to update /etc/fstab.
# 查看分区 [root@server ~ 17:16:52]# parted /dev/sdb unit MiB print
...
Number Start End Size Type File system 标志
# 创建分区
[root@server ~ 17:17:14]# parted /dev/sdb unit MiB mkpart primary 1 2049
信息: You may need to update /etc/fstab.
[root@server ~ 17:18:06]# parted /dev/sdb unit MiB print
...
Number Start End Size Type File system 标志
1 1.00MiB 2049MiB 2048MiB primary xfs
# 扩展分区
[root@server ~ 17:18:24]# parted /dev/sdb unit MiB resizepart 1 5121
信息: You may need to update /etc/fstab.
[root@server ~ 17:20:39]# parted /dev/sdb unit MiB print
...
Number Start End Size Type File system 标志
1 1.00MiB 5121MiB 5120MiB primary xfs
# 删除分区
[root@server ~ 17:20:53]# parted /dev/sdb rm 1
信息: You may need to update /etc/fstab.
[root@server ~ 17:22:12]# parted /dev/sdb unit MiB print
...
Number Start End Size Type File system 标志
管理 GPT 磁盘
管理GPT磁盘基本与管理MBR磁盘一致,除了创建分区。
设置磁盘分区管理方案
# 设置分区方案为gpt,输入mklabel gpt
[root@server ~ 17:24:25]# parted /dev/sdb
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
警告: The existing disk label on /dev/sdb will be destroyed and all data on
this disk will be lost. Do you want to continue?
是/Yes/否/No? yes
创建分区
(parted) unit MiB
(parted) mkpart
分区名称? []? data01
文件系统类型? [ext2]? xfs
起始点? 1
结束点? 2049
(parted) print
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
1 1.00MiB 2049MiB 2048MiB xfs data01
扩展分区
(parted) resizepart 1 5121
(parted) print
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
1 1.00MiB 5121MiB 5120MiB xfs data01
删除分区
(parted) rm 1
(parted) print
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
免交互操作
# 设置磁盘分区管理方案
[root@server ~ 17:28:59]# parted /dev/sdb mklabel gpt
警告: The existing disk label on /dev/sdb will be destroyed and all data on
this disk will be lost. Do you want to continue?
是/Yes/否/No? yes
# 创建分区
[root@server ~ 17:29:27]# parted /dev/sdb unit MiB mkpart data01 1 2049
信息: You may need to update /etc/fstab.
# 查看分区 [root@server ~ 17:30:50]# parted /dev/sdb unit MiB print
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdb: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
1 1.00MiB 2049MiB 2048MiB xfs data01
# 删除分区
[root@server ~ 17:31:07]# parted /dev/sdb rm 1
信息: You may need to update /etc/fstab.
[root@server ~ 17:33:05]# parted /dev/sdb print
Model: ATA VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
文件系统持久化挂载
环境准备
利用 parted 创建一个分区,并格式化为xfs文件系统。
[root@server ~ 17:33:24]# parted /dev/sdb mklabel gpt
警告: The existing disk label on /dev/sdb will be destroyed and all data on
this disk will be lost. Do you want to continue?
是/Yes/否/No? yes
信息: You may need to update /etc/fstab.
[root@server ~ 17:34:27]# parted /dev/sdb unit MiB mkpart data01 xfs 1 2049
信息: You may need to update /etc/fstab.
[root@server ~ 17:34:58]# mkfs.xfs /dev/sdb1
mkfs.xfs: /dev/sdb1 appears to contain an existing filesystem (xfs).
mkfs.xfs: Use the -f option to force overwrite.
# 如果格式化时候,提示存在文件系统,则需要-f选项强制格式化
[root@server ~ 17:35:12]# mkfs.xfs -f /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=524288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
持久化挂载
当服务器重启时,系统不会再次将文件系统自动挂载到目录树上,用户无法访问。为了确保系统在启动时自动挂载文件系统, 需要在 /etc/fstab文件中添加一个条目。
/etc/fstab 是以空格分隔的文件,每行具有六个字段。
- **第一个字段指定设备。**可以使用UUID或device来指定设备。
- **第二个字段是目录挂载点。**通过它可以访问目录结构中的块设备。挂载点必须存在;如果不存在,请使用mkdir命令进行创建。
- 第三个字段包含文件系统类型,如xfs或ext4 。
- 第四个字段是挂载选项,以逗号分隔的。 defaults是一组常用选项。详细信息参考mount(8) 。
- 第五个字段指定dump命令是否备份设备。
- 第六个字段指定fsck顺序字段,决定了在系统启动吋是否应运行fsck命令,以验证文件系统是否干净。 该字段中的值指示了 fsck的运行顺序。 对于XFS文件系统, 请将该字段设为0 ,因为XFS并不使用fsck来检查自己的文件系统状态。 对于ext4 文件系统,如果是根文件系统, 请将该字段设 为 1 ; 如果是其他ext4 文件系统, 则将该字段设为2。 这样, fsck就会先处理根文件系统,然后同步检查不同磁盘上的文件系统,并按顺序检查同一磁盘上的文件系统。
[root@server ~ 17:35:19]# blkid /dev/sdb1
/dev/sdb1: UUID="2bbc90b2-7d19-4d12-b84d-1b442958424f" TYPE="xfs" PARTLABEL="data01" PARTUUID="fcd3c29a-f293-4f4a-91ef-962b10ebe29e"
[root@server ~ 17:36:19]# vim /etc/fstab
# 最后一行增加一个条目
UUID="2bbc90b2-7d19-4d12-b84d-1b442958424f" /data01 xfs defaults 0 0
# 使用如下命令立刻挂载
[root@server ~ 17:37:11]# mount /data01
mount: 挂载点 /data01 不存在
[root@server ~ 17:37:28]# mkdir /data01
[root@server ~ 17:37:40]# mount /data01
# 验证
[root@server ~ 17:37:42]# df -h /data01
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb1 2.0G 33M 2.0G 2% /data01
# 重启系统验证
#reboot
#df -h /data01
取消持久化挂载
删除/etc/fstab中对应条目即可。
案例
情况1:大量的大文件占用空间
准备环境
[root@server ~ 14:15:29]# parted /dev/sdb mklabel gpt
信息: You may need to update /etc/fstab.
[root@server ~ 14:34:46]# parted /dev/sdb unit MiB mkpart data01 xfs 1 2049
信息: You may need to update /etc/fstab.
[root@server ~ 14:35:49]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 2G 0 part
sdc 8:32 0 200G 0 disk
└─sdc1 8:33 0 20G 0 part
sr0 11:0 1 4.4G 0 rom
#格式化
[root@server ~ 14:36:28]# mkfs.xfs /dev/sdb1
mkfs.xfs: /dev/sdb1 appears to contain an existing filesystem (xfs).
mkfs.xfs: Use the -f option to force overwrite.
#加-f强制格式化
[root@server ~ 14:36:46]# mkfs.xfs -f /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
...
[root@server ~ 14:37:00]# mkdir /myapp-1
[root@server ~ 14:38:27]# mount /dev/sdb1 /myapp-1
[root@server ~ 14:38:44]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mapper/centos-root 50G 2.0G 49G 4% /
/dev/sdb1 2.0G 33M 2.0G 2% /myapp-1
[root@server ~ 14:38:48]# cp -r /etc/ /myapp-1/
# 创建一个大文件
[root@server ~ 14:39:02]# dd if=/dev/zero of=/myapp-1/etc/bigfile bs=1M count=2000
dd: 写入"/myapp-1/etc/bigfile" 出错: 设备上没有空间
记录了1972+0 的读入
记录了1971+0 的写出
2067202048字节(2.1 GB)已复制,7.99655 秒,259 MB/秒
原因:大文件占用大量空间。
解决方法:找到文件后删除。
[root@server ~ 14:40:35]# df -h /dev/sdb1
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb1 2.0G 2.0G 344K 100% /myapp-1
# 方法1:find 查找
[root@server ~ 14:40:47]# find /myapp-1/ -size +100M
/myapp-1/etc/bigfile
# 方法2:du 查找
[root@server ~ 14:41:12]# du -s /myapp-1/*
2052328 /myapp-1/etc
[root@server ~ 14:41:34]# du -s /myapp-1/etc/* | sort -n |tail -5
656 /myapp-1/etc/services
1860 /myapp-1/etc/pki
8672 /myapp-1/etc/udev
19452 /myapp-1/etc/selinux
2018752 /myapp-1/etc/bigfile
#删除大文件
[root@server ~ 14:41:59]# rm -f /myapp-1/etc/bigfile
[root@server ~ 14:43:23]# df -h /dev/sdb1
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb1 2.0G 67M 2.0G 4% /myapp-1
情况2:删除文件后,空间没有释放
准备环境
[root@server ~ 14:43:37]# dd if=/dev/zero of=/myapp-1/etc/bigfile bs=1M count=2000
dd: 写入"/myapp-1/etc/bigfile" 出错: 设备上没有空间
记录了1972+0 的读入
记录了1971+0 的写出
2067202048字节(2.1 GB)已复制,3.35014 秒,617 MB/秒
[root@server ~ 14:47:07]# tail -f /myapp-1/etc/bigfile &
[1] 109246
[root@server ~ 14:47:32]# rm -f /myapp-1/etc/bigfile
[root@server ~ 14:48:26]# df -h /myapp-1/
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb1 2.0G 2.0G 344K 100% /myapp-1
原因:被删除的文件,仍然有程序在使用。
解决方法:找到像一个的程序并,终止程序。
[root@server ~ 14:54:28]# lsof |grep /myapp-1/
tail 123447 root 3r REG 8,17 2067202048 797 /myapp-1/etc/bigfile (deleted)
[root@server ~ 14:54:48]# kill -9 123447
[root@server ~ 14:55:12]# df -h /myapp-1
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb1 2.0G 67M 2.0G 4% /myapp-1
[1]+ 已杀死 tail -f /myapp-1/etc/bigfile
建议:清理大文件,先使用重定向清空文件内容,再删除文件。
情况3:大量的小文件占用空间
准备环境
[root@server ~ 15:04:12]# parted /dev/sdb unit MiB mkpart data02 ext4 2049 3073
信息: You may need to update /etc/fstab.
[root@server ~ 15:07:45]# mkfs.ext4 /dev/sdb2
[root@server ~ 15:07:58]# mkdir /myapp-2
[root@server ~ 15:08:15]# mount /dev/sdb2 /myapp-2
[root@server ~ 15:08:28]# df -i /dev/sdb2
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb2 65536 11 65525 1% /myapp-2
[root@server ~ 15:08:48]# touch /myapp-2/file-{00001..65530}
touch: 无法创建"/myapp-2/file-65526": 设备上没有空间
touch: 无法创建"/myapp-2/file-65527": 设备上没有空间
touch: 无法创建"/myapp-2/file-65528": 设备上没有空间
touch: 无法创建"/myapp-2/file-65529": 设备上没有空间
touch: 无法创建"/myapp-2/file-65530": 设备上没有空间
[root@server ~ 15:09:39]# df -i /myapp-2
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb2 65536 65536 0 100% /myapp-2
原因:文件系统中inode使用完了。
解决方法:删除大量的小文件或者将这些小文件备份到其他地方。
# 思路1:直接将这些小文件移走或删除
[root@server ~ 15:09:46]# rm -rf /myapp-2/*
[root@server ~ 15:11:17]# df -i /myapp-2
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb2 65536 10 65526 1% /myapp-2
# 思路2:合并大量小文件为单个文件
# cat /myapp-2/file-{00001..10000} > file-00001
管理软 RAID
RHEL 提供多磁盘和设备管理 (mdadm) 程序实用程序来创建和管理软件RAID。
管理 RAID0
创建 RAID
# 创建一个包含2个块设备的raid0设备/dev/md0
[root@server ~ 18:05:36]# mdadm --create /dev/md0 --level 0 --raid-devices 2 /dev/sd{b,c}
mdadm: /dev/sdb appears to be part of a raid array:
level=raid1 devices=2 ctime=Mon Sep 22 16:13:54 2025
mdadm: /dev/sdc appears to be part of a raid array:
level=raid1 devices=2 ctime=Mon Sep 22 16:13:54 2025
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
查看 RAID
[root@server ~ 18:05:51]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Mon Sep 22 18:05:51 2025
Raid Level : raid0
Array Size : 41908224 (39.97 GiB 42.91 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Mon Sep 22 18:05:51 2025
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Chunk Size : 512K
Consistency Policy : none
Name : server.cloud:0 (local to host server.cloud)
UUID : bc41d24c:6d740496:79c97587:c2c90f56
Events : 0
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
需要关注的属性:
- Raid Level : raid0
- State : clean
- Chunk Size : 512K
- 设备清单
[root@server ~ 18:06:13]# lsblk /dev/md0
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md0 9:0 0 40G 0 raid0
格式化和挂载
[root@server ~ 18:10:30]# mkdir -p /data/raid0
[root@server ~ 18:10:49]# mount /dev/md0 /data/raid0
mount: 将 /dev/md0 挂载到 /data/raid0 失败: 结构需要清理
[root@server ~ 18:11:02]# mkfs.xfs -f /dev/md0
meta-data=/dev/md0 isize=512 agcount=16, agsize=654720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=10475520, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=5120, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@server ~ 18:12:22]# mount /dev/md0 /data/raid0
[root@server ~ 18:12:29]# df -h /data/raid0
文件系统 容量 已用 可用 已用% 挂载点
/dev/md0 40G 33M 40G 1% /data/raid0
[root@server ~ 18:12:33]# cp /etc/ho* /data/raid0
[root@server ~ 18:12:38]# ls /data/raid0/
host.conf hostname hosts hosts.allow hosts.deny
删除 RAID
[root@server ~ 18:12:43]# umount /dev/md0
[root@server ~ 18:13:46]# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
[root@server ~ 18:13:51]# mdadm --zero-superblock /dev/sd{b,c}
补充说明
- raid0 条带不能增加新成员盘。
- raid0 条带不能强制故障成员盘。
管理 RAID1
创建 RAID
[root@server ~ 18:15:39]# mdadm --create /dev/md1 --level 1 --raid-devices 2 /dev/sd{b,c}
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
查看 RAID
[root@server ~ 18:15:59]# mdadm --detail /dev/md1
/dev/md1:
Version : 1.2
Creation Time : Mon Sep 22 18:15:59 2025
Raid Level : raid1
Array Size : 20954112 (19.98 GiB 21.46 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Mon Sep 22 18:15:59 2025
State : clean, resyncing
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : resync
Resync Status : 4% complete
Name : server.cloud:1 (local to host server.cloud)
UUID : de9289f7:c2705404:737e1b21:02f12f4b
Events : 0
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
需要关注的属性:
- Raid Level : raid1
- State : clean, resyncing,正在同步。
- Consistency Policy : resync
- Resync Status : 33% complete,同步进度。
- 设备清单
[root@server ~ 18:16:04]# lsblk /dev/md1
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
md1 9:1 0 20G 0 raid1
格式化和挂载
等待同步完成:直到同步进度达到100%,然后进行格式化和挂载。
[root@server ~ 18:17:48]# mkfs.xfs -f /dev/md1
[root@server ~ 18:17:55]# mkdir /data/raid1
[root@server ~ 18:18:01]# mount /dev/md1 /data/raid1
[root@server ~ 18:18:05]# df -h /data/raid1
文件系统 容量 已用 可用 已用% 挂载点
/dev/md1 20G 33M 20G 1% /data/raid1
# 创建数据
[root@server ~ 18:18:09]# cp /etc/ho* /data/raid1
[root@server ~ 18:18:14]# ls /data/raid1/
host.conf hostname hosts hosts.allow hosts.deny
增加热备盘
[root@server ~ 18:18:18]# mdadm /dev/md1 --add /dev/sdd
mdadm: added /dev/sdd
[root@server ~ 18:19:06]# mdadm --detail /dev/md1 |tail -5
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
2 8 48 - spare /dev/sdd
模拟故障
# 强制成员盘故障
[root@server ~ 18:19:11]# mdadm /dev/md1 --fail /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md1
# 查看成员状态
[root@server ~ 18:19:36]# mdadm --detail /dev/md1 |tail -5
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
2 8 48 1 spare rebuilding /dev/sdd
1 8 32 - faulty /dev/sdc
# 数据依然正常访问
[root@server ~ 18:19:43]# ls /data/raid1/
host.conf hostname hosts hosts.allow hosts.deny
删除故障磁盘
[root@server ~ 18:19:53]# mdadm /dev/md1 --remove /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md1
[root@server ~ 18:21:16]# mdadm --detail /dev/md1 |tail -5
Events : 42
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
2 8 48 1 active sync /dev/sdd
删除 RAID
[root@server ~ 18:21:29]# umount /dev/md1
[root@server ~ 18:21:48]# mdadm --stop /dev/md1
mdadm: stopped /dev/md1
[root@server ~ 18:21:53]# mdadm --zero-superblock /dev/sd{b..d}
补充说明
RAID1的设计初衷是数据冗余和可靠性,而不是为了增加存储容量。因此,即使添加了新的硬盘并进行了扩容操作,由于RAID1的工作方式,其总容量是不会增加的。
管理 RAID5
创建 RAID
# 创建一个包含4个块设备的raid5设备/dev/md2
[root@server ~ 18:22:00]# mdadm --create /dev/md5 --level 5 --raid-devices 4 /dev/sd{b..e}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
查看 RAID
[root@server ~ 18:23:10]# mdadm --detail /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Mon Sep 22 18:23:09 2025
Raid Level : raid5
Array Size : 62862336 (59.95 GiB 64.37 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Mon Sep 22 18:23:10 2025
State : clean, degraded, recovering
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Rebuild Status : 3% complete
Name : server.cloud:5 (local to host server.cloud)
UUID : 81995236:dae7b827:638222b6:7426e4a2
Events : 1
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
4 8 64 3 spare rebuilding /dev/sde
需要关注的属性:
- Raid Level : raid5
- State : clean, resyncing,正在同步。
- Consistency Policy : resync
- Resync Status : 17% complete,同步进度。
- 设备清单
[root@server ~ 18:24:37]# mkfs.xfs -f /dev/md5
[root@server ~ 18:24:44]# mkdir /data/raid5
[root@server ~ 18:24:50]# mount /dev/md5 /data/raid5
[root@server ~ 18:24:55]# df -h /data/raid5/
文件系统 容量 已用 可用 已用% 挂载点
/dev/md5 60G 33M 60G 1% /data/raid5
[root@server ~ 18:24:59]# cp /etc/ho* /data/raid5
[root@server ~ 18:25:04]# ls /data/raid5/
host.conf hostname hosts hosts.allow hosts.deny
增加热备盘
# RAID5 阵列增加一个块热备盘
[root@server ~ 18:25:08]# mdadm /dev/md5 --add /dev/sdf
mdadm: added /dev/sdf
[root@server ~ 18:25:49]# mdadm --detail /dev/md5 |tail -7
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
4 8 64 3 active sync /dev/sde
5 8 80 - spare /dev/sdf
模拟故障
[root@server ~ 18:25:53]# mdadm /dev/md5 --fail /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md5
[root@server ~ 18:27:01]# mdadm --detail /dev/md5 |tail -7
Number Major Minor RaidDevice State
5 8 80 0 spare rebuilding /dev/sdf
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
4 8 64 3 active sync /dev/sde
0 8 16 - faulty /dev/sdb
[root@server ~ 18:27:13]# ls /data/raid5/
host.conf hostname hosts hosts.allow hosts.deny
删除故障磁盘
[root@server ~ 18:27:37]# mdadm /dev/md5 --remove /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md5
[root@server ~ 18:28:06]# mdadm --detail /dev/md5 |tail -5
Number Major Minor RaidDevice State
5 8 80 0 spare rebuilding /dev/sdf
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
4 8 64 3 active sync /dev/sde
删除 RAID
# 卸载
[root@server ~ 18:28:13]# umount /dev/md5
# stop RAID 阵列,将删除阵列
[root@server ~ 18:29:12]# mdadm --stop /dev/md5
mdadm: stopped /dev/md5
# 清除原先设备上的 md superblock
[root@server ~ 18:29:17]# mdadm --zero-superblock /dev/sd{b..g}
mdadm: Unrecognised md component device - /dev/sdg
更多推荐



所有评论(0)