Linux 磁盘管理详解(新手详细版)
本文档面向零基础新手,从“Linux 里磁盘、分区、文件系统、挂载”讲起,详细说明查看磁盘、分区概念、创建文件系统、挂载与卸载、开机自动挂载、交换分区、空间查看与清理等,并配有大量示例和安全提示。
一、先弄清几个概念
1.1 磁盘(Disk)
- 磁盘是物理存储设备:硬盘、SSD、U 盘等。
- 在 Linux 里,每块磁盘对应 /dev 下的一个设备文件,例如:
- SATA/SCSI 硬盘:
/dev/sda、/dev/sdb…… - NVMe SSD:
/dev/nvme0n1、/dev/nvme1n1…… - 数字 n 表示第几块盘,p 后面的数字表示分区,如
nvme0n1p1表示第一块 NVMe 盘的第 1 个分区。
- SATA/SCSI 硬盘:
我们不直接往“整块盘”里存文件,而是先划分分区,在分区上建文件系统,再把文件系统挂载到某个目录才能读写文件。
1.2 分区(Partition)
- 分区是把一块磁盘在逻辑上切成几块,每块可以单独格式化成不同用途(如系统、数据、交换分区)。
- 分区也对应 /dev 下的设备文件,例如:
/dev/sda1:第一块 SATA 盘的第 1 个分区/dev/sda2:第 2 个分区/dev/nvme0n1p1:第一块 NVMe 盘的第 1 个分区
1.3 文件系统(Filesystem)
- 文件系统是分区上的一种“格式”,决定了数据如何存放、如何找文件(如目录树、权限)。
- 常见类型:
- ext4:Linux 上最常用的本地文件系统
- xfs:大文件、大容量常用
- NTFS:Windows 常用,Linux 可读可写(需驱动)
- FAT32/exFAT:U 盘、跨平台常用
只有建好文件系统后,分区才能被挂载并当“目录”使用。
1.4 挂载(Mount)
- 挂载就是把某个分区(或网络存储等)“接到”一个空目录上,之后访问这个目录就是在访问该分区里的文件。
- 例如:把
/dev/sda2挂载到/data,则ls /data看到的就是该分区里的内容。 - 挂载点:用来挂载的那个目录,如
/、/home、/data。
总结关系:
磁盘 → 分区 → 在分区上建文件系统 → 把该分区挂载到某目录 → 通过该目录读写文件。
二、查看磁盘和分区(不修改,最安全)
2.1 lsblk:看块设备树形结构(推荐首选)
块设备包括磁盘和分区。lsblk 以树形显示,谁是谁的子设备一目了然。
lsblk
示例输出(格式因系统略有差异):
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 238.5G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 237G 0 part /
└─sda3 8:3 0 976M 0 part [SWAP]
sdb 8:16 0 14.9G 0 disk
└─sdb1 8:17 0 14.9G 0 part
- NAME:设备名(sda、sda1 等)。
- SIZE:容量。
- TYPE:disk(整块盘)、part(分区)。
- MOUNTPOINT:挂载点,空表示未挂载;[SWAP] 表示用作交换分区。
常用选项:
lsblk -f
# 多出文件系统类型(FSTYPE)、UUID、标签等,便于写 fstab
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,FSTYPE
# 自选列
2.2 fdisk -l:看分区表详情(需 root)
sudo fdisk -l
会列出所有磁盘及分区表(类型、起止扇区、大小等)。
指定某块盘:
sudo fdisk -l /dev/sda
注意:fdisk /dev/sda(没有 -l)会进入分区编辑,可修改或删除分区,新手不要随意执行,以免误删分区。
2.3 blkid:看分区 UUID 和类型
sudo blkid
示例输出:
/dev/sda1: UUID="xxxx-xxxx" TYPE="vfat" PARTLABEL="EFI" ...
/dev/sda2: UUID="yyyy-yyyy" TYPE="ext4" PARTUUID="..." ...
UUID 是分区的唯一标识,在 /etc/fstab 里用 UUID 挂载比用设备名更稳定(设备名可能因插拔顺序变化)。
2.4 小结:先“看”再“动”
- 日常查看:
lsblk、lsblk -f。 - 要看分区表细节:
sudo fdisk -l。 - 要写 fstab:用
sudo blkid或lsblk -f记下 UUID。
三、查看“已挂载”的磁盘空间:df
df 显示已挂载的文件系统占用了多少空间、还剩多少。
df
常用:
df -h
# -h:人类可读单位(K、M、G、T)
示例输出:
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 233G 45G 177G 21% /
/dev/sda1 511M 100M 412M 20% /boot/efi
- Filesystem:对应设备或 UUID。
- Size/Used/Avail:总容量、已用、可用。
- Use%:使用百分比。
- Mounted on:挂载点。
只看某个挂载点:
df -h /
df -h /home
四、查看目录占用空间:du
du 看目录(及子目录)在磁盘上占了多少空间,不会“跨挂载点”把别的分区算进来。
du 目录
常用:
du -h 目录
# -h:人类可读单位
du -sh 目录
# -s:只显示该目录汇总,不展开子目录
# -h:人类可读
示例:
# 当前目录下各子目录占用
du -sh *
# 主目录总占用
du -sh ~
# 找出当前目录下最大的几个目录(配合 sort)
du -sh * | sort -h
五、挂载与卸载(mount / umount)
5.1 挂载:mount
需要 root。基本形式:
sudo mount 设备 挂载点
- 设备:分区设备文件(如
/dev/sdb1)或 UUID。 - 挂载点:一个已存在的空目录(若目录里有文件,挂载后会被“遮住”,卸载后才再出现)。
示例:
# 先建挂载点
sudo mkdir -p /mnt/mydisk
# 把 U 盘或第二块硬盘的第一个分区挂上去(设备名按 lsblk 实际为准)
sudo mount /dev/sdb1 /mnt/mydisk
# 查看是否挂上
df -h /mnt/mydisk
ls /mnt/mydisk
用 UUID 挂载(更稳妥):
# 先查 UUID
sudo blkid /dev/sdb1
# 假设输出里有 UUID="abcd-1234-..."
sudo mount UUID=abcd-1234-... /mnt/mydisk
# 或
sudo mount /dev/disk/by-uuid/abcd-1234-... /mnt/mydisk
注意:这样挂载是临时的,重启后会消失。若想开机自动挂载,需要写 /etc/fstab(见下一节)。
5.2 卸载:umount
需要 root。卸载前先离开该挂载点(不要 cd 在该目录下),并确保没有程序正在使用该分区。
sudo umount 挂载点
# 或
sudo umount 设备
示例:
cd ~
sudo umount /mnt/mydisk
# 若提示 device is busy,用 lsof 或 fuser 查谁在用,关闭后再 umount
5.3 查看当前挂载:mount(无参数)
mount
# 或只看某类
mount | grep sda
六、开机自动挂载:/etc/fstab
fstab 里每一行定义一个“挂载项”,开机时会按这些行自动挂载。
6.1 格式(每行 6 列)
设备或UUID 挂载点 文件系统类型 选项 dump fsck顺序
示例一行(用 UUID):
UUID=yyyy-yyyy /data ext4 defaults 0 2
- 第 1 列:设备或 UUID(推荐 UUID)。
- 第 2 列:挂载点,必须是已有目录。
- 第 3 列:文件系统类型,如 ext4、xfs、ntfs、vfat。
- 第 4 列:挂载选项,常用
defaults(等价于 rw,suid,dev,exec,auto,nouser,async)。 - 第 5 列:dump 备份用,一般填 0。
- 第 6 列:fsck 检查顺序,根分区常用 1,其他 2,不检查为 0。
6.2 添加一块数据盘并开机挂载(示例)
# 1. 确认设备与 UUID
lsblk -f
sudo blkid /dev/sdb1
# 假设 UUID=abcd-1234-...,类型 ext4
# 2. 创建挂载点
sudo mkdir -p /data
# 3. 先手动挂一次,确认没问题
sudo mount /dev/sdb1 /data
ls /data
sudo umount /data
# 4. 编辑 fstab(用 visudo 同系列的谨慎习惯,这里用备份后编辑)
sudo cp /etc/fstab /etc/fstab.bak
sudo nano /etc/fstab
# 或 sudo vim /etc/fstab
# 在末尾加一行(UUID 按实际改):
# UUID=abcd-1234-... /data ext4 defaults 0 2
# 5. 测试 fstab 是否正确(不重启)
sudo mount -a
# 无报错即成功;再 df -h 看 /data 是否挂上
注意:fstab 写错可能导致开机无法挂载甚至进不了系统,所以要先备份、先 mount -a 测试。
七、分区上创建文件系统:mkfs(危险,会清空分区)
在新分区或确定可清空的分区上才能做,否则该分区上所有数据会丢失。
7.1 常见用法
# 在 /dev/sdb1 上创建 ext4 文件系统
sudo mkfs.ext4 /dev/sdb1
# 创建 xfs
sudo mkfs.xfs /dev/sdb1
# 创建 FAT32(如 U 盘给 Windows 用)
sudo mkfs.vfat -F 32 /dev/sdb1
7.2 带标签(可选,便于识别)
sudo mkfs.ext4 -L mydata /dev/sdb1
# 之后 lsblk -f 会显示 LABEL="mydata"
在 fstab 里也可以用 LABEL=mydata 代替 UUID。
7.3 再次强调
- 务必确认设备名:用
lsblk看清楚,不要误选系统盘分区(如 sda1、sda2)。 - 执行前再确认一次:
lsblk /dev/sdb1,确保是你要格式化的那块。
八、分区操作(概念与工具简介)
分区会改变磁盘布局,误操作会丢数据。 新手以“会看”为主,真要分区建议在虚拟机或全新磁盘上练习。
8.1 分区表类型
- MBR:老式,最多 4 个主分区(或 3 主 + 1 扩展 + 多个逻辑分区),磁盘最大约 2TB。
- GPT:新式,分区数多、支持大容量,UEFI 常用。
8.2 常用工具(仅作了解)
- fdisk:传统,主要针对 MBR;
sudo fdisk /dev/sdb进入交互,不要对系统盘乱用。 - parted:支持 GPT,可脚本化;
sudo parted /dev/sdb。
示例(仅说明流程,不在真实系统盘上执行):
# 查看分区表(只读)
sudo parted /dev/sdb print
创建分区、删除分区的具体步骤因磁盘状态而异,建议先掌握 lsblk、mount、fstab,再在资料或虚拟机中专门学分区。
九、检查与修复文件系统:fsck(只读检查 / 修复)
文件系统损坏时可用 fsck 检查或修复。必须先卸载该分区(根分区需用救援模式或单用户模式)。
9.1 按类型调用
# 假设 /dev/sdb1 是 ext4,且已卸载
sudo fsck.ext4 /dev/sdb1
# 或
sudo e2fsck -f /dev/sdb1
- -f:强制检查(即使“干净”也检查)。
- -y:自动回答 yes(修复时慎用,先看清提示)。
不要对已挂载的分区做 fsck,否则可能进一步损坏。
十、交换分区 / 交换文件(Swap)
Swap 是“用磁盘当内存”的扩展,内存不够时系统会把不常用的数据换到 swap。
10.1 查看当前 swap
free -h
# 看 Swap 一行
swapon --show
# 列出正在使用的 swap 设备/文件
10.2 交换分区
若已有 swap 分区(如 /dev/sda3),启用和关闭:
# 启用
sudo swapon /dev/sda3
# 关闭
sudo swapoff /dev/sda3
在 /etc/fstab 里可写一行,开机自动启用:
UUID=swap分区的UUID none swap sw 0 0
10.3 交换文件(不分区也能加 swap)
在现有文件系统上建一个“大文件”当 swap,适合没有单独 swap 分区时使用。
# 1. 创建一个 2GB 的空文件
sudo fallocate -l 2G /swapfile
# 若 fallocate 不可用:sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
# 2. 权限设为仅 root 可读写
sudo chmod 600 /swapfile
# 3. 格式化为 swap
sudo mkswap /swapfile
# 4. 启用
sudo swapon /swapfile
# 5. 验证
free -h
swapon --show
若希望开机自动启用该交换文件,在 /etc/fstab 加一行:
/swapfile none swap sw 0 0
十一、查找大文件、清理空间(实用)
11.1 找出大目录
# 主目录下各目录占用,并排序
du -sh ~/* 2>/dev/null | sort -h
# 当前目录下一层,按大小排
du -sh * | sort -h
11.2 找出大文件(如大于 100MB)
find / -type f -size +100M 2>/dev/null
# 2>/dev/null 把“没权限”等错误丢掉,只看到结果
11.3 清理常见占用
- 包管理器缓存(可安全清理):
- Debian/Ubuntu:
sudo apt clean或sudo apt autoclean
- Debian/Ubuntu:
- 日志:
/var/log下大文件可先看再考虑 truncate 或删旧日志(需根据业务来)。 - 用户缓存:
~/.cache可酌情清理。
# 看 /var 下谁占得多
sudo du -sh /var/* | sort -h
十二、LVM 简介(可选了解)
LVM(Logical Volume Manager)是在“物理分区”之上再做一层“逻辑卷”,便于以后扩容、做快照等。
- 物理卷 PV:通常对应一个分区或整块盘。
- 卷组 VG:由多个 PV 组成的一个“池子”。
- 逻辑卷 LV:在 VG 上划出来的“逻辑分区”,上面再建文件系统并挂载。
常用命令(仅作了解):
# 查看
pvdisplay
vgdisplay
lvdisplay
# 创建(示例流程,不直接执行)
# pvcreate /dev/sdb1
# vgcreate myvg /dev/sdb1
# lvcreate -L 50G -n mylv myvg
# mkfs.ext4 /dev/myvg/mylv
# mount /dev/myvg/mylv /data
新手可先掌握“普通分区 + 挂载 + fstab”,再在资料或虚拟机里专门学 LVM。
十三、一条龙示例:新 U 盘使用流程(概念)
假设 U 盘在系统中为 /dev/sdb,只有一个分区 /dev/sdb1,要挂到 /mnt/usb 使用。
# 1. 查看
lsblk
lsblk -f
# 确认 /dev/sdb1 存在,记下 UUID 和类型(如 vfat 或 exfat)
# 2. 挂载点
sudo mkdir -p /mnt/usb
sudo mount /dev/sdb1 /mnt/usb
# 3. 使用
ls /mnt/usb
cp myfile.txt /mnt/usb/
# 4. 卸载(使用完毕后)
cd ~
sudo umount /mnt/usb
# 再拔 U 盘
若希望每次插入后都挂到同一位置,可把该 U 盘的 UUID 和挂载点写进 /etc/fstab(类型、选项按实际文件系统来填)。
十四、安全与习惯建议(新手必读)
- 先看再动:动磁盘前必用
lsblk、df、blkid确认设备名和挂载情况,避免误操作系统盘。 - 不要对“正在用的系统分区”做 mkfs、fsck:会丢数据或损坏系统。
- 改 fstab 前先备份:
sudo cp /etc/fstab /etc/fstab.bak;改完后用sudo mount -a测试。 - 卸载前离开挂载点:不要 cd 在挂载点里执行
umount;若提示 device is busy,用lsof 挂载点或fuser -vm 挂载点查进程。 - 分区、格式化在虚拟机或全新盘上练:避免在生产系统盘上试。
十五、命令速查表
| 需求 | 命令示例 |
|---|---|
| 看磁盘与分区 | lsblk、lsblk -f |
| 看分区表 | sudo fdisk -l、sudo fdisk -l /dev/sda |
| 看 UUID/类型 | sudo blkid、sudo blkid /dev/sdb1 |
| 看已挂载与空间 | df -h、df -h / |
| 看目录占用 | du -sh 目录、du -sh * | sort -h |
| 挂载 | sudo mount 设备 挂载点、sudo mount UUID=xxx 挂载点 |
| 卸载 | sudo umount 挂载点 |
| 开机挂载 | 编辑 /etc/fstab,再 sudo mount -a 测试 |
| 创建文件系统 | sudo mkfs.ext4 /dev/sdb1(会清空!) |
| 检查文件系统 | sudo fsck.ext4 /dev/sdb1(需先卸载) |
| Swap | swapon --show、sudo swapon /dev/sda3、sudo swapoff /dev/sda3 |
| 找大文件 | find / -type f -size +100M 2>/dev/null |
| 找大目录 | du -sh * | sort -h |
十六、小结
- 关系:磁盘 → 分区 → 文件系统 → 挂载到目录 → 读写文件。
- 查看:
lsblk、lsblk -f、df -h、du -sh、blkid。 - 挂载/卸载:
mount、umount;开机自动挂载写 /etc/fstab,改前备份、改后mount -a测试。 - 创建文件系统:
mkfs.ext4等,仅对新分区或可清空分区使用,并反复确认设备名。 - Swap:交换分区或交换文件,用
swapon/swapoff,可选写 fstab。 - 空间不足:用
du、find找大目录和大文件,再结合日志、缓存等做安全清理。
建议在虚拟机里多做几次“挂载 U 盘、写 fstab、建 swap 文件”的练习,再结合 Linux简介.md、Linux系统目录结构.md 理解 /、/home、/mnt 等挂载点,磁盘管理就清晰了。
文档以常见 Linux 发行版为准;设备名(如 sda、nvme0n1)因硬件和驱动而异,以本机 lsblk 为准。