Skip to content

文件系统操作命令

查看文件系统信息

bash
df -h                  # 显示磁盘空间使用情况
lsblk                  # 列出块设备信息
mount                  # 显示已挂载的文件系统
file -s /dev/sda1      # 查看分区文件系统类型

文件系统管理

bash
mkfs.ext4 /dev/sdb1    # 创建ext4文件系统
fsck /dev/sda1         # 检查修复文件系统
tune2fs -l /dev/sda1   # 显示ext文件系统信息
resize2fs /dev/sda1    # 调整ext文件系统大小
xfs_growfs /dev/sda1	# 调整xfs文件系统大小
mkswap /dev/sda1		# 交换分区格式化

挂载与卸载

bash
mount /dev/sdb1 /mnt/data   # 挂载文件系统
umount /mnt/data            # 卸载文件系统
mount -a                    # 挂载/etc/fstab中所有文件系统
swapon /dev/sda1			# 挂载交换分区
swapoff /dev/sda1			# 取消交分区

开机自动挂载 /etc/fstab

在 Linux 系统中,/etc/fstab 文件用于定义文件系统的静态挂载配置,使得系统在启动时能够自动挂载指定的文件系统。

字段解析

bash
<file system> <mount point> <type> <options> <dump> <pass>

<file system>:文件系统标识符,可以是设备名称(如/dev/sda1)、UUID 或标签。

<mount point>:文件系统的挂载点。

<type>:文件系统的类型(如ext4xfsswap等)。

<options>:挂载选项(如defaultsrwro等)。

  • defaults:使用默认挂载选项(rwsuiddevexecautonouserasync)。
  • noauto:不自动挂载,需要手动挂载。
  • user:允许普通用户挂载。
  • ro:只读挂载。
  • rw:读写挂载。

<dump>:用于dump命令的备份选项,通常设置为0(不备份)。

  • 0:代表不要做dump备份
  • 1:代表要每天进行dump的操作
  • 2:代表不定日期的进行dump操作

<pass>:文件系统检查顺序,通常设置为01/根文件系统设置为1,其他文件

  • 0:不要检验
  • 1:最早检验(一般根目录会选择)
  • 2:1级别检验完成之后进行检验

磁盘分区

MBR磁盘分区流程步骤

1、查看添加硬盘设备

bash
ll /dev/sd*

2、进入交互模式

bash
fdisk /dev/sdb

3、交互模式-添加扩展分区

输入选项n,主分区选择p,扩展分区选择e

bash
[root@localhost ~]# fdisk /dev/sdb

欢迎使用 fdisk (util-linux 2.39.1)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):n
分区类型
   p   主分区 (0个主分区,0个扩展分区,4空闲)
   e   扩展分区 (逻辑分区容器)
选择 (默认 p):e
分区号 (1-4, 默认  1): 
第一个扇区 (2048-20971519, 默认 2048): 
最后一个扇区,+/-sectors +size{K,M,G,T,P} (2048-20971519, 默认 20971519): 

创建了一个新分区 1,类型为“Extended”,大小为 10 GiB。

4、交互模式-添加逻辑分区

输入选项n,分区类型选择l。如果没有可分配空间会默认添加逻辑分区

bash
命令(输入 m 获取帮助):n
所有主分区的空间都在使用中。
添加逻辑分区 5
第一个扇区 (4096-20971519, 默认 4096): 
最后一个扇区,+/-sectors +size{K,M,G,T,P} (4096-20971519, 默认 20971519): 

创建了一个新分区 5,类型为“Linux”,大小为 10 GiB。

5、查看分区

输入指令p

bash
命令(输入 m 获取帮助):p
Disk /dev/sdb:10 GiB,10737418240 字节,20971520 个扇区
磁盘型号:VMware Virtual S
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x4a507e20

设备       启动  起点     末尾     扇区 大小 Id 类型
/dev/sdb1        2048 20971519 20969472  10G  5 扩展
/dev/sdb5        4096 20971519 20967424  10G 83 Linux

6、交互模式-保存退出

输入指令w

bash
命令(输入 m 获取帮助):w
分区表已调整。
将调用 ioctl() 来重新读分区表。
正在同步磁盘。

7、分区格式化

bash
[root@localhost ~]# mkfs.ext4 /dev/sdb5
mke2fs 1.47.0 (5-Feb-2023)
创建含有 2620928 个块(每块 4k)和 655360 inode 的文件系统
文件系统 UUID:30b5655b-24c3-462f-95ee-71065794e1b3
超级块的备份存储于下列块:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

正在分配组表:完成                            
正在写入 inode表:完成                            
创建日志(16384 个块):完成
写入超级块和文件系统账户统计信息:已完成

8、创建挂载目录

bash
mkdir /data

9、查看设备信息

根据自己操作系统选择设备路径

bash
blkid /dev/sdb5

10、挂载磁盘

bash
mount /dev/sdb5 /data

11、检测

bash
df -Th

12、开机自启动

永久生效需在/etc/fstab添加配置

bash
/dev/sdb5 /data ext4 defaults 0 0

GPT磁盘分区流程步骤

1、查看添加硬盘设备/dev/sdc

bash
[root@localhost ~]# ll /dev/sd*
brw-rw----. 1 root disk 8,  0  4月17日 14:30 /dev/sda
brw-rw----. 1 root disk 8,  1  4月17日 14:30 /dev/sda1
brw-rw----. 1 root disk 8,  2  4月17日 14:30 /dev/sda2
brw-rw----. 1 root disk 8,  3  4月17日 14:30 /dev/sda3
brw-rw----. 1 root disk 8, 16  4月17日 14:57 /dev/sdb
brw-rw----. 1 root disk 8, 17  4月17日 14:57 /dev/sdb1
brw-rw----. 1 root disk 8, 21  4月17日 14:59 /dev/sdb5
brw-rw----. 1 root disk 8, 32  4月17日 14:30 /dev/sdc

2、进入交互模式

bash
parted /dev/sdc

3、创建新的磁盘卷标设置gpt

bash
(parted) mklabel                                                          
新的磁盘卷标类型? gpt

4、设置分区名称

bash
(parted) mkpart                                                           
分区名称?  []? yunjisuan

5、设置文件系统类型

bash
文件系统类型?  [ext2]? ext4

6、设置起始点

bash
起始点? 0

7、设置结束点

bash
结束点? 10G                                                              
警告: 所产生的分区没有适当为获得最佳性能而对齐:34s % 2048s != 0s
忽略/Ignore/放弃/Cancel? ignore

8、退出

bash
(parted) q                                                                
信息: 你可能需要 /etc/fstab。

9、分区格式化

bash
[root@localhost ~]# mkfs.ext4 /dev/sdc1
mke2fs 1.47.0 (5-Feb-2023)
创建含有 2441402 个块(每块 4k)和 610800 inode 的文件系统
文件系统 UUID:f07106e3-7c69-4ce3-86de-d1256a770a1b
超级块的备份存储于下列块:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

正在分配组表:完成                            
正在写入 inode表:完成                            
创建日志(16384 个块):完成
写入超级块和文件系统账户统计信息:已完成

10、查看设备信息

bash
[root@localhost ~]# blkid /dev/sdc1
/dev/sdc1: UUID="f07106e3-7c69-4ce3-86de-d1256a770a1b" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="yunjisuan" PARTUUID="b3bd25a6-360d-4433-ae17-1a37ca039286"

11、创建挂载目录

bash
mkdir /data

12、挂载

bash
mount /dev/sdc1 /data

13、检测挂载

bash
df -Th

14、开机自启动

永久生效需在/etc/fstab添加配置

bash
/dev/sdc1 /data ext4 defaults 0 0

swap交换分区流程

1、查看增加设备

bash
ll /dev/sd*

2、进入磁盘分区交互模式

bash
fdisk /dev/sdb

3、交互模式-添加主分区

bash
命令(输入 m 获取帮助):n
分区类型
   p   主分区 (0个主分区,0个扩展分区,4空闲)
   e   扩展分区 (逻辑分区容器)
选择 (默认 p):

4、交互模式-设置分区号和扇区大小

bash
分区号 (1-4, 默认  1): 
第一个扇区 (2048-20971519, 默认 2048): 
最后一个扇区,+/-sectors +size{K,M,G,T,P} (2048-20971519, 默认 20971519):

5、交互模式-更改分区类型

bash
命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码或别名(输入 L 列出所有代码):82
# 82为Linux swap / So

6、交互模式-查看分区并保存

bash
命令(输入 m 获取帮助):p
命令(输入 m 获取帮助):w

7、格式化交换分区

bash
mkswap /dev/sdb1

8、查看文件系统信息

bash
blkid /dev/sdb1

9、开启交换分区

bash
# 创建挂载目录
mkdir /data
# 激活
swapon /dev/sdb1 /data

10、开机自动挂载

永久生效需在/etc/fstab添加配置

bash
/dev/sdb1 /data none swap sw 0 0

LVM 逻辑卷

创建 LVM 逻辑卷的步骤

1.挂载点

bash
df -h
lsblk

2. 创建物理卷

使用 pvcreate 命令将磁盘或分区转换为物理卷。例如:

bash
# 创建
pvcreate /dev/sdb

# 查看
pvdisplay /dev/sdb

这条命令将 /dev/sdb 磁盘转换为 LVM 物理卷。

3. 创建卷组

使用 vgcreate 命令创建卷组,并将物理卷添加到卷组中。例如:

bash
vgcreate yunjisuan /dev/sdb

这条命令创建了一个名为 yunjisuan 的卷组,并将 /dev/sdb 物理卷添加到该卷组中。

4. 创建逻辑卷

使用 lvcreate 命令在卷组中创建逻辑卷。例如:

bash
lvcreate -n datalv -L +5G yunjisuan

这条命令在 yunjisuan 卷组中创建了一个名为 datalv、大小增加 5GB 的逻辑卷。

注意:+5G是在原基础上增加,5G是整体大小为5G

5. 格式化逻辑卷

逻辑卷创建完成后,需要格式化为文件系统

bash
mkfs.ext4 /dev/yunjisuan/datalv

命令将逻辑卷格式化为 ext4 文件系统

6.挂载逻辑卷

bash
mkdir /data
mount /dev/yunjisuan/datalv /data

第一条命令创建挂载点 /data,第二条命令将逻辑卷挂载到该挂载点。

7.开机自动挂载

mount挂载是临时操作,下次系统重启不会自动挂载,可编辑/etc/fstab文件或者/etc/rc.d.rc.local

bash
# /etc/fstab
/dev/yunjisuan/datalv /data		ext4	defaults	0 0

# /etc/rc.d/rc.local
mount /dev/yunjisuan/datalv /data

8.检测

bash
df -Th

调整逻辑卷大小步骤

扩大逻辑卷

  1. 使用 lvextend 命令扩展逻辑卷的大小。例如:

    bash
    lvextend --size +2G /dev/datavg/datalv

    这条命令将逻辑卷 datalv 扩大 2GB。

  2. 调整文件系统大小以适应新的逻辑卷大小。

    对于 ext4 文件系统,可以使用 resize2fs 命令:

    bash
    resize2fs /dev/datavg/datalv

    对于 XFS 文件系统,可以使用 xfs_growfs 命令:

    bash
    xfs_growfs /mnt/data

缩小逻辑卷

在缩小逻辑卷之前,需要确保文件系统不会受到损坏。以下是缩小逻辑卷的步骤:

  1. 卸载逻辑卷:

    bash
    umount /dev/datavg/datalv
  2. 文件系统完整行检查和修复

    bash
    e2fsck -f /dev/datavg/datalv
  3. 调整文件系统大小。

    对于 ext4 文件系统,可以使用 resize2fs 命令:

    bash
    resize2fs /dev/datavg/datalv 3G

    这条命令将文件系统大小调整为 3GB。

  4. 使用 lvreduce 命令缩小逻辑卷的大小:

    bash
    lvreduce -L 3G /dev/datavg/datalv

    注意:在缩小逻辑卷时,必须确保逻辑卷的新大小大于或等于文件系统大小,否则可能导致数据丢失。

  5. 挂载逻辑卷:

    bash
    mount /dev/datavg/datalv /mnt/data

创建快照卷

快照卷用于在某一时刻创建逻辑卷的快照,以便进行数据备份或恢复。以下是创建快照卷的步骤:

  1. 使用 lvcreate 命令创建快照卷。例如:

    bash
    lvcreate --size 1G --snapshot --name datalv-snapshot /dev/datavg/datalv

    这条命令创建了一个名为 datalv-snapshot、大小为 1GB 的快照卷,用于保存 datalv 逻辑卷的当前状态。

  2. 挂载快照卷并进行数据备份。例如:

    bash
    mkdir /mnt/snapshot
    mount /dev/datavg/datalv-snapshot /mnt/snapshot
  3. 在备份完成后,可以删除快照卷以释放空间:

    bash
    umount /mnt/snapshot
    lvremove /dev/datavg/datalv-snapshot

    注意:快照卷的大小应足够保存在创建快照后对原始逻辑卷所做的更改。如果快照卷空间不足,快照将失效。

系统文件扩容步骤

1.查看添加设备

bash
lsblk

2.创建物理卷

bash
pvcreate /dev/sdd

3.卷组扩容

bash
# 先查看要扩容的卷组
pvdisplay

# 我这里以openeuler为例
vgextent openeuler /dev/sdd

4.逻辑卷扩容

bash
lvextent -l +100%FREE /dev/openeuler/root

5.在线格式化

bash
## 操作前先查看文件系统类型
resize2fs /dev/openeuler/root		# ext格式
xfs_growfs /dev/openeuler/root		# xfs

6.检测

bash
df -Th

重点说明

系统逻辑卷扩容后不要缩减,因为硬盘里已经存储系统文件信息,移除硬盘会影响系统的正常运行

磁盘阵列

安装工具

bash
# RHEL
yum/dnf -y install mdadm

# Ubuntu 
apt -y install mdadm

创建磁盘阵列

注意:创建完阵列后需要mdadm -D 阵列路径查看状态进度Resync Status到达100%后在继续下一步操作。如没有Resync Status则表示进度100%。

  1. 创建 RAID0 阵列

    假设使用两块磁盘 /dev/sdb/dev/sdc-C创建,-v显示过程,-n磁盘数量,-lraid0级别

    创建完成后,mdadm 会开始同步数据,可通过查看 /proc/mdstat 文件监控同步进度。

    bash
    mdadm -Cv /dev/md0 -n 2 -l 0 /dev/sdb /dev/sdc
    # 查看详情进度
    mdadm -D /dev/md0
  2. 创建 RAID1 阵列

    假设使用两块磁盘 /dev/sdb/dev/sdc-C创建,-v显示过程,-n磁盘数量,-lraid1级别 ,-x备用盘数量

    创建完成后,mdadm 会开始同步数据,可通过查看 /proc/mdstat 文件监控同步进度。

    bash
    mdadm -Cv /dev/md1 -n 2 -l 0 -x 1 /dev/sdb /dev/sdc
    # 查看详情进度
    mdadm -D /dev/md1
  3. 创建 RAID5 阵列

    假设使用三块磁盘/dev/sda1/dev/sdb1/dev/sdc1-C创建,-v显示过程,-n磁盘数量,-lraid5级别 ,-x备用盘数量,创建完成后,mdadm 会开始同步数据

    bash
    mdadm -Cv /dev/md5 -l 5 -n 3 -x 1 /dev/sda1 /dev/sdb1 /dev/sdc1
    # 查看详情进度
    mdadm -D /dev/md5
  4. 创建 RAID10 阵列

    若使用四块磁盘 /dev/sdb/dev/sdc/dev/sdd/dev/sde-C创建,-v显示过程,-n磁盘数量,-lraid1和0的组合 ,-x备用盘数量,创建完成后,mdadm 会开始同步数据

    bash
    mdadm -Cv /dev/md10 -n 4 -l 10 -x 1 /dev/sd[b-e]
    
    # 查看详情进度
    mdadm -D /dev/md10

格式化与挂载磁盘阵列

bash
# 格式化
mkfs.ext4 /dev/md0
# 创建挂载点
mkdir /mnt/raid
# 挂载
mount /dev/md0 /mnt/raid

# 设置自动挂载
## /etc/fstab 
/dev/md0 /mnt/raid ext4 defaults 0 2
## /etc/rc.d/rc.local(添加执行权限chmod +x /etc/rc.d/rc.local)
mount /dev/md0 /mnt/raid

查看磁盘阵列状态

bash
mdadm -D /dev/md0		# 查看指定 RAID 设备的详细信息
# 或
cat /proc/mdstat		# 获取当前所有 RAID 设备的状态信息

停止和删除磁盘阵列

bash
# 停止阵列,停止后数据将无法访问,但磁盘上的数据不会丢失
mdadm -S /dev/md0
# 删除阵列,先确保阵列已停止且数据已备份或不再需要,然后删除与阵列相关的文件系统
mdadm -r /dev/md0

raid扩容

bash
# 添加磁盘设备到阵列md0中
mdadm -a /dev/md0 /dev/sdb
# 扩展阵列x设置 RAID 中活动设备的数量
mdadm -G /dev/md0 -n x

生成配置文件

默认的配置文件在/etc/mdadm.conf,在阵列的信息行尾添加auto=yes

bash
mdadm -Ds /dev/md0 | sed "s/$/ auto=yes/" > /etc/mdadm.conf

RAID10 创建逻辑卷

查看硬盘信息

bash
# 查看系统中可用的磁盘设备
lsblk
 
fdisk -l

创建 RAID10 阵列

bash
mdadm -Cv /dev/md10 -l 10 -n 4 /dev/sdb /dev/sdc /dev/sdd /dev/sde
  • /dev/md0 为创建的 RAID 设备名称
  • -l--level=10 指定 RAID 级别为 10
  • -n--raid-devices=4 指定用于创建阵列的磁盘数量为 4 块
  • 最后跟着的是组成阵列的各个磁盘设备路径

查看 RAID 阵列状态

查看刚创建的 RAID10 阵列的详细信息,包括阵列的状态、成员磁盘等。

查看信息由百分比进度提示说明还未创建完成,创建完成后进度会消失。

bash
mdadm -D /dev/md10

创建raid配置文件

默认读取/etc/mdadm.conf配置文件

bash
mdadm -Ds | sed 's/$/ auto=yes/' > /etc/mdadm.conf

创建裸分区(可选)

创建裸分区这一步骤在某些特定场景下是必要的,并非在所有创建 RAID10 逻辑卷的流程中都必须有

主要目的及原因

  • 某些特定的应用程序或数据库系统,如 Oracle 数据库、某些高性能计算应用等,可能要求数据存储在裸分区上。
  • 创建裸分区后,可以将多个裸分区整合到一个卷组中,实现存储资源的灵活分配和管理,通过在卷组中创建逻辑卷,可以根据实际需求将不同存储设备的容量组合起来,提供给用户统一的、逻辑上的存储空间,而用户无需关心底层存储设备的具体物理分布情况
  • 当使用裸分区创建逻辑卷后,可以根据业务需求的变化,灵活地对逻辑卷的大小进行调整。
  • 裸分区的存在使得数据在存储设备之间的迁移和备份更加方便。
  • 兼容多种文件系统和操作系统

创建分区

使用 partedfdisk 等工具对 RAID 阵列设备 /dev/md10 进行分区操作,创建裸分区,如创建一个占满整个阵列空间的分区 /dev/md10p1

bash
# mbr最大支持2T
fdisk /dev/md10
	m 帮助
	n 添加主分区
	w 保存退出

# gpt
parted /dev/md10
	(parted) mklabel                                                          
	新的磁盘卷标类型? gpt
	(parted) mkpart                                                           
	分区名称?  []? yunjisuan
	文件系统类型?  [ext2]? ext4
	起始点? 0  
	结束点? 10G  或者 100%
	(parted) q

创建物理卷

将刚才创建的裸分区初始化为物理卷,使其能够被 LVM 使用

bash
pvcreate /dev/md10p1

创建卷组

创建一个名为 vg_raid10 的卷组,并将物理卷 /dev/md10p1 添加到该卷组中

bash
vgcreate vg_raid10 /dev/md10p1

创建逻辑卷

从卷组 vg_raid10 中创建一个名为 lv_raid10大小为 20GB 的逻辑卷

bash
lvcreate -n lv_raid10 -L 20G vg_raid10
# 或者
lvcreate -n lv_raid10 -l +100%FREE vg_raid10

格式化逻辑卷

根据需求使用相应的文件系统格式化命令对逻辑卷进行格式化,如格式化为 ext4或xfs文件系统

bash
# ext4
mkfs.ext4 /dev/vg_raid10/lv_raid10
# xfs
mkfs.xfs /dev/vg_raid10/lv_raid10

创建挂载点并挂载

创建挂载目录然后将格式化后的逻辑卷挂载到该目录下

bash
mkdir /data && mount /dev/vg_raid10/lv_raid10 /data

设置开机挂载

若希望系统启动时自动挂载该逻辑卷,可将挂载信息添加到 /etc/fstab

bash
echo "/dev/vg_raid10/lv_raid10 /data ext4 defaults 0 0" >> /etc/fstab

RAID10 逻辑卷扩容

添加新硬盘

将新硬盘与现有 RAID 阵列中的硬盘型号和规格一致,物理连接到服务器或存储系统中

扩容 RAID 设备

命令执行需要查看进度100%后才可以执行后续操作

bash
# 向 RAID 中添加新设备
mdadm -a /dev/md10 /dev/sdf

设置RAID设备大小

bash
mdadm -G /dev/md10 --size=max

这只RAID磁盘数量

bash
mdadm -G /dev/md10 -n 5

扩容物理卷

由于 RAID 设备上已经有分区 /dev/md10p1,不能直接对 /dev/md10 使用 pvcreate,需要对分区 /dev/md10p1 进行操作。执行以下命令扩容物理卷:

bash
pvresize  /dev/md10p1

验证扩容结果

使用 df -h 命令查看文件系统空间是否成功扩展,确认新增空间可用

扩容文件系统(可选)

如果df -Th结果大小为改变可尝试以下命令

bash
# ext4
resize2fs /dev/vg_raid10/lv_raid10

# xfs
xfs_growfs /dev/vg_raid10/lv_raid10

RAID10 逻辑卷缩容

取消逻辑卷挂载

bash
umount /dev/vg_raid10/lv_raid10

查看RAID设备详细信息

bash
mdadm -D /dev/md10

将磁盘标记为故障

bash
mdadm -f /dev/md10 /dev/sdf

从RAID阵列中移除磁盘

bash
mdadm -r /dev/md10 /dev/sdf

清除磁盘上的RAID超级块信息

bash
mdadm --zero-superblock /dev/sdf

调整 RAID 阵列大小

bash
mdadm -G /dev/md10 --size=10G

调整 RAID 阵列的磁盘数量

bash
mdadm -G /dev/md10 -n 4

调整物理卷大小

bash
pvresize /dev/md10p1

调整逻辑卷大小

bash
lvreduce -L 10G /dev/vg_raid10/lv_raid10

检测并修复文件系统

bash
e2fsck -f /dev/vg_raid10/lv_raid10

调整文件系统大小

bash
resize2fs /dev/vg_raid10/lv_raid10 10G

挂载文件系统

bash
mount /dev/vg_raid10/lv_raid10 /data

检测文件系统大小

bash
df -Th

RAID10 逻辑卷销毁

取消挂载

bash
umount /dev/vg_raid10/lv_raid10

删除逻辑卷

bash
lvremove /dev/vg_raid10/lv_raid10

删除卷组

bash
vgremove vg_raid10

删除物理卷

bash
pvremove /dev/md10p1

停止RAID

bash
mdadm -S /dev/md10

清除磁盘上的 RAID 超级块信息

bash
mdadm --zero-superblock /dev/sd[bcdefg]

更新 RAID 配置文件

bash
/etc/mdadm.conf中要销毁的raid相关配置删除掉

验证 RAID 阵列是否已销毁

确认 RAID 阵列已不存在

bash
cat /proc/mdstat