文章目录
Linux磁盘管理
磁盘使用流程
第一步:磁盘进行分区
第二步:磁盘格式化,格式成合适的文件系统,如window的ntfs,linux的ext3,xfs
第三步:挂载目录
第四步:就可以进行读写数据
常用命令
- 查看磁盘列表
lsblk
[11:49:59 root@centos8 ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 154G 0 part
├─centos-root 253:0 0 100G 0 lvm /
├─centos-swap 253:1 0 4G 0 lvm [SWAP]
└─centos-data 253:2 0 50G 0 lvm /data
sr0 11:0 1 1024M 0 rom
## 查看磁盘文件系统信息-顯示文件系統類型
[10:50:55 root@centos8 ~]#lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs ef4150c4-70be-4f12-a9c8-6fda16cef466 /boot
└─sda2 LVM2_member o273p0-3OvZ-nieC-PuPT-AMS2-ONP3-MEgD74
├─centos-root xfs ba2440e2-c49a-4d0f-b189-18bc80241297 /
├─centos-swap swap 7b3d7c3f-ad45-4c22-b466-0d30d1e9c4c8 [SWAP] # swap 交换文件系统
└─centos-data xfs cc5818b0-5fbc-4102-9e6a-960e943186d2 /data
sr0
- 查看磁盘详情
fdisk -l
[11:53:49 root@centos8 ~]#fdisk -l
Disk /dev/sda: 214.7 GB, 214748364800 bytes, 419430400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0009a9ec
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 325076991 161488896 8e Linux LVM
Disk /dev/mapper/centos-root: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/centos-swap: 4294 MB, 4294967296 bytes, 8388608 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/centos-data: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
- 查看磁盘使用情况
df -h
[11:53:59 root@centos8 ~]#df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 974M 0 974M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 11M 981M 2% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/mapper/centos-root 100G 6.8G 94G 7% /
/dev/sda1 1014M 304M 711M 30% /boot
/dev/mapper/centos-data 50G 255M 50G 1% /data
overlay 100G 6.8G 94G 7% /var/lib/docker/overlay2/1d44160e595ffc134242c36c9ee8f34b588f4832d2cdbf3dbe799cdd6d10815b/merged
tmpfs 199M 0 199M 0% /run/user/0
- 查看磁盘健康情况
smartctl -a /dev/sda
[11:54:37 root@centos8 ~]#smartctl -a /dev/sda
smartctl 7.0 2018-12-30 r4883 [x86_64-linux-3.10.0-1160.119.1.el7.x86_64] (local build)
Copyright (C) 2002-18, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Vendor: VMware,
Product: VMware Virtual S
Revision: 1.0
User Capacity: 214,748,364,800 bytes [214 GB]
Logical block size: 512 bytes
Rotation Rate: Solid State Device
Device type: disk
Local Time is: Mon Mar 10 11:55:16 2025 CST
SMART support is: Unavailable - device lacks SMART capability.
=== START OF READ SMART DATA SECTION ===
Current Drive Temperature: 0 C
Drive Trip Temperature: 0 C
Error Counter logging not supported
Device does not support Self Test logging
分区操作
MBR(主引导记录)和GPT(GUID 分区表)是两种不同的磁盘分区表格式。它们之间有几个重要的区别,主要体现在支持的磁盘大小、分区数量、兼容性和可靠性等方面。
- 磁盘支持大小
MBR:最大支持 2TB 的磁盘。因为 MBR 使用 32 位来存储分区的起始位置和大小,最大只能表示 2^32(即 2^31 扩展到负数)个扇区(一个扇区通常为 512 字节),导致它无法处理超过 2TB 的磁盘。
GPT:支持更大磁盘,最大可以支持到 9.4ZB(即 9.4 亿 TB)。GPT 使用 64 位来存储分区信息,理论上可以支持几乎无限制的大磁盘,远超当前实际使用的磁盘大小。 - 分区数量
MBR:最多支持 4 个主分区,或者 3 个主分区和 1 个扩展分区。扩展分区可以包含多个逻辑分区,但实际上一个 MBR 分区表最多只能容纳 4 个分区。
GPT:支持最多 128 个分区(Windows 中的默认值),理论上可以创建更多的分区。GPT 分区表没有像 MBR 那样的主分区和扩展分区限制,所有分区都可以是主分区。
MBR(主引导记录)
-
硬盘结构默认分区1-4留给主分区和扩展分区
- 主分区1 * (型号代表引导分区)
- 主分区2
- 主分区3
- 主分区4(扩展分区)
- 逻辑分区1
- 逻辑分区2
- 。。。
-
分区编辑器
fdisk
分区管理命令
fdisk
危险命令,谨慎使用
编辑分区
fdisk /dev/sda2
- 操作说明
- 执行分区
# 查询磁盘列表信息,过滤sd相关行
[17:31:41 root@centos8 ~]#fdisk -l | grep sd
Disk /dev/sda: 214.7 GB, 214748364800 bytes, 419430400 sectors
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 325076991 161488896 8e Linux LVM
Disk /dev/sdb: 32.2 GB, 32212254720 bytes, 62914560 sectors
# 对磁盘/dev/sdb进行分区处理
[17:31:50 root@centos8 ~]#fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x9f15ff09.
Command (m for help): n # 输入n 添加分区操作
Partition type:
p primary (0 primary, 0 extended, 4 free) # p 主分区
e extended # e 扩展分区
Select (default p): p # 选择P 添加主分区
Partition number (1-4, default 1): # 直接回车,默认分区编号1
First sector (2048-62914559, default 2048): # 直接回车 主分区开始扇区,默认值2048
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-62914559, default 62914559): +256M # 结束扇区 +256M
Partition 1 of type Linux and of size 256 MiB is set
Command (m for help): n # 添加分区
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): e # 选择e 添加扩展分区
Partition number (2-4, default 2): # 直接回车
First sector (526336-62914559, default 526336): # 直接回车 扩展分区开始扇区
Using default value 526336
Last sector, +sectors or +size{K,M,G} (526336-62914559, default 62914559): # 直接回车 扩展分区结束扇区 把所有剩余空间分配给扩展分区
Using default value 62914559
Partition 2 of type Extended and of size 29.8 GiB is set
Command (m for help): n # 添加逻辑分区
Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): l # 选择l 添加逻辑分区
Adding logical partition 5
First sector (528384-62914559, default 528384): # 直接回车,开始扇区
Using default value 528384
Last sector, +sectors or +size{K,M,G} (528384-62914559, default 62914559): +10G # +10G 结束扇区,分配10G空间
Partition 5 of type Linux and of size 10 GiB is set
Command (m for help): n # 添加逻辑分区
Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): l # 选择l 添加逻辑分区
Adding logical partition 6
First sector (21501952-62914559, default 21501952): # 直接回车,开始扇区
Using default value 21501952
Last sector, +sectors or +size{K,M,G} (21501952-62914559, default 62914559): # 直接回车 ,结束扇区,分配剩余空间
Using default value 62914559
Partition 6 of type Linux and of size 19.8 GiB is set
Command (m for help): p # p 打印分配信息
Disk /dev/sdb: 32.2 GB, 32212254720 bytes, 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x9f15ff09
Device Boot Start End Blocks Id System
/dev/sdb1 2048 526335 262144 83 Linux
/dev/sdb2 526336 62914559 31194112 5 Extended
/dev/sdb5 528384 21499903 10485760 83 Linux
/dev/sdb6 21501952 62914559 20706304 83 Linux
Command (m for help): w # 确认无误,输入w 保存分区信息,写入硬盘 (如果有误,输入n,退出重新执行上述流程)
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
- 分区编号信息存在在
/proc/partitions
文件中
[17:51:18 root@centos8 ~]#cat /proc/partitions
major minor #blocks name
8 0 209715200 sda
8 1 1048576 sda1
8 2 161488896 sda2
8 16 31457280 sdb
8 17 262144 sdb1
8 18 1 sdb2
8 21 10485760 sdb5
8 22 20706304 sdb6
11 0 1048575 sr0
253 0 104857600 dm-0
253 1 4194304 dm-1
253 2 52428800 dm-2
GPT(GUID 分区表
- 分区管理工具
parted
或gdisk
gdisk
命令操作和fdisk
操作类似
注意
:parted
命令是实时生效的,使用的时候一定要小心!
文件系统
- fat16 fat32 ,最早的windows的文件系统,确定是单文件,不能超过2GB
- NTFS文件系统,支持文件加密,采用日志形式的文件系统,详细记录磁盘读写操作,支持数据恢复,能搞提高磁盘数据的安全性,突破当个4GB大小限制
- exFAT 文件系统 新式文件系统,单个文件支持16GB大小,能够在windows和Linux,macos同时识别
Linux 支持多種文件系統,每個文件系統都有其特點和適用範圍。以下是一些常見的文件系統類型:
- Ext4(Fourth Extended File System):目前最常用的 Linux 文件系統,提供穩定性、性能和支持大容量磁碟。它是 Ext3 的升級版,支持更大的文件和分區。
- Ext3(Third Extended File System):舊版的 Ext 文件系統,具有日誌功能(journaling),比 Ext2 更穩定,但速度和擴展性較差。
- Ext2(Second Extended File System):不具備日誌功能,速度較快,但一旦系統崩潰,數據損壞的風險較高。
- Btrfs(B-tree File System):一個新的 Linux 文件系統,旨在提供高效的數據完整性、快照、壓縮和自動修復等功能。
- XFS:一種高性能的文件系統,特別適合於處理大文件,通常用於企業級存儲解決方案。
- F2FS(Flash-Friendly File System):專為 NAND 閃存設備設計,能夠優化其性能。
- ZFS:雖然原本是 Sun Microsystems 開發的,但現在也能在 Linux 上使用。它有強大的數據保護、快照和壓縮功能。
- VFAT/FAT32:用於小型存儲設備(如 USB 驅動器),兼容性強,但不支持 Linux 特有的高級特性。
mkfs
针对磁盘分区进行格式化文件系统
mkfs.xfs /dev/sda分区编号
格式成xfs
類型文件系統 ,centos7/8后常用mkfs.ext4 /dev/sda分区编号
格式成ext4
类型文件系统,ubuntu/debain系统常用
[19:46:04 root@centos8 ~]#mkfs # tab補全
mkfs mkfs.btrfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.fat mkfs.minix mkfs.msdos mkfs.vfat mkfs.xfs
fsck
命令,修复文件系统的命令, 默认读取、etc/fstab 开机挂载文件的
查看文件系统属性
- centos7之前的系统,使用dumpe2fs命令,打印文件系统块组信息,适用于ext2,ext3,ext4
- centos7之后的系统默认使用xfs文件系统,使用xfs_info 打印文件系统信息
- tune2fs命令,设置linux是否开机自动检查文件系统是否正常
lsblk命令,列出所有与设备及文件系统信息
同步磁盘分区表到内存
# centos7/8 直接执行就ok
partprobe
# centos6 指定硬盘进行刷新(新增时)
partx -a /dev/sda
# centos6 指定硬盘进行刷新(删除时)
partx -d --nr 6-8 /dev/sda
挂载
- 挂载操作
mount [选项] <设备> <挂载点>
- 取消挂载
umount <设备>
# 或
umount <挂载点>
- 查看设备或设备中文件是否被使用
lsof /dev/sd[a/b/c]
## 如下
[10:13:39 root@centos8 dir_xfs]#lsof /dev/sdb1
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 6682 root cwd DIR 8,17 4096 2 /data/dir_xfs
bash 6849 root cwd DIR 8,17 4096 2 /data/dir_xfs
lsof 6908 root cwd DIR 8,17 4096 2 /data/dir_xfs
lsof 6909 root cwd DIR 8,17 4096 2 /data/dir_xfs
-
挂载点存在被占用时,可以使用
fuser -km 挂载点
,把全部使用者全部踢出 -
永久挂载
fstab 文件是 Linux 系统用于配置文件系统挂载点的文件。通过编辑该文件来实现持久挂载。
- 查看磁盘信息
通过 lsblk 或 fdisk 等命令查看系统中所有可用的硬盘及其分区。
lsblk
- 查找分区的 UUID
使用 blkid 命令获取硬盘分区的 UUID(唯一标识符),因为 UUID 是最推荐的持久化方式,因为它不会随着设备的插拔而变化。
也可以用设备名称 进行挂载(不推荐),设备插拔或增删会改变设备名称
sudo blkid /dev/sdX1
例如,假设输出如下:
/dev/sdb1: UUID="1234abcd-56ef-78gh-90ij-1234567890ab" TYPE="ext4"
- 使用编辑器打开 /etc/fstab 文件:
sudo nano /etc/fstab
- 添加挂载信息
在 fstab 文件中,添加一行来配置硬盘分区的持久挂载。行的格式如下:
UUID=1234abcd-56ef-78gh-90ij-1234567890ab /mnt/data ext4 defaults 0 2
- UUID=1234abcd-56ef-78gh-90ij-1234567890ab:硬盘分区的 UUID(在步骤 2 中获得)。
- /mnt/data:挂载点,表示你希望硬盘挂载到的目录。你可以根据需要修改此路径。
- ext4:文件系统类型,根据你硬盘的实际文件系统来设置,如 ext4, ntfs, vfat 等。
- defaults:挂载选项,defaults 是一个常用的默认选项。
- 0:表示是否需要进行文件系统备份(通常设置为 0)。
- 2:表示文件系统检查顺序,根文件系统通常为 1,其他文件系统为 2。
扩展lsof
lsof(List Open Files)是一个用于列出当前系统中所有已打开文件的命令。它可以显示与文件相关的进程信息,包括文件描述符、文件类型、访问模式以及打开这些文件的进程。
在 Linux 或类 Unix 系统中,几乎所有的资源(如设备、目录、库文件、网络连接等)都被视为文件,因此 lsof 可以帮助用户查看所有打开的文件以及它们被哪些进程使用。
常见用法:
- 列出所有打开的文件:
lsof
- 查看某个进程打开的文件:
lsof -p <PID>
#其中 <PID> 是进程 ID。
- 查看某个文件被哪些进程打开:
lsof <filename>
- 查看某个网络端口的使用情况:
lsof -i :<port>
#例如,要查看 80 端口的使用情况,可以使用 lsof -i :80。
- 查看特定用户打开的文件:
lsof -u <username>
lsof 是一个非常强大的工具,用于诊断文件系统、网络连接等方面的故障。