一、什么是挂载
1.挂载的定义
在 Ubuntu(或其他 Linux 系统)中,挂载(Mount) 是将一个存储设备或分区连接到系统的文件系统层次结构中的过程。挂载后,你可以通过某个目录(挂载点)访问该设备上的文件和数据。
2.挂载的作用
Linux 中所有设备(如硬盘、U盘、光盘等)都必须挂载后才能被访问。
-
逻辑上的统一文件系统
挂载后的设备成为 Linux 文件系统的一部分,用户可以通过挂载点访问设备上的内容。
-
操作透明
挂载的设备就像本地目录,文件操作(如复制、移动、删除)无需关心底层硬件设备。
-
动态扩展存储
可以随时将新设备挂载到系统中,扩展存储空间。
3.挂载点
挂载点是一个目录,挂载后该目录会显示设备的内容。常见挂载点:
/mnt
:临时挂载的设备。/media/username/device_name
:自动挂载的设备(如U盘)。/home
:用户的主目录。/
(根目录):主文件系统挂载点。
4.挂载的过程
挂载通常分为两种:手动挂载 和 自动挂载。
-
手动挂载
你需要指定设备和挂载点进行挂载。常见命令:
sudo mount <设备名> <挂载点>
# 示例
# /dev/sdb1:要挂载的设备
# /mnt:挂载点
sudo mount /dev/sdb1 /mnt
-
自动挂载
某些设备(如 U 盘)插入后,系统会自动挂载到 /media
下。也可以通过配置 /etc/fstab
文件,实现开机自动挂载。
- 卸载挂载
如果设备不再需要,可以卸载(unmount)。卸载后,设备不再连接到文件系统,数据不会丢失。
sudo umount <挂载点或设备名>
# 示例
# /mnt:临时挂载的设备
sudo umount /mnt
# 如果卸载时显示 busy,可以尝试强制卸载
sudo umount -l <挂载点或设备名>
-l
(lazy umount):延迟卸载,立即取消挂载点的关联,剩余任务后台完成。
5.查看挂载信息
5.1 使用 lsbik
lsblk -f
lsblk
是一个列出系统中所有块设备(block devices,如硬盘、分区、光驱等)信息的命令。-f
参数专门显示每个设备的文件系统信息,包括类型、标签、UUID 等。
# 通过 -o 参数显示指定列,可以比较 lsblk 额外添加 SIZE 列,更方便
lsblk -o NAME,SIZE,FSTYPE,LABEL,UUID,FSAVAIL,FSUSE%,MOUNTPOINT
NAME:设备名称。
- 表示设备的路径,通常位于
/dev
目录下。 sda
是主硬盘设备,sda1
是其第一个分区,sda2
是第二个分区,依次类推。sda
和nvme0n1
:分别表示传统硬盘(SATA)和 NVMe 固态硬盘
FSTYPE:文件系统类型。
- 表示每个分区的文件系统类型,例如:
ext4
:Linux 常用文件系统。swap
:交换分区,用于虚拟内存。ntfs
:Windows 常用文件系统。vfat
:兼容性高的 FAT 文件系统。
- 如果没有文件系统(如原始设备),此列会为空。
LABEL:分区标签。
- 可由用户为分区命名,方便识别。
rootfs
和home
是自定义标签,常用于挂载点说明。
UUID:分区的唯一标识符(Universally Unique Identifier)。
- 每个分区都有唯一的 UUID,方便在配置文件(如
/etc/fstab
)中引用。 - UUID 比设备名更稳定,不会因设备插拔顺序变化而改变。
FSAVAIL:可用空间(文件系统级别)。
- 显示分区中剩余可用的空间。
- 单位通常为
G
(GB)。
FSUSE%:已用空间的百分比。
- 显示分区的使用率。
- 如
40%
表示此分区使用了 40% 的空间。
MOUNTPOINT:挂载点。
- 表示分区挂载到文件系统中的路径,例如
/
(根目录)、/home
或/mnt/data
。 - 如果分区未挂载,此列为空。
5.2 使用 df
df -h
df
(disk free)是一个命令,用于查看文件系统的总空间、已用空间、可用空间和挂载点等信息。- 默认情况下,输出以字节为单位,但不易阅读。使用
-h
参数,可以以更直观的单位(如 GB、MB)显示。
6.查看磁盘分布
6.1 使用 baobab
安装 Disk Usage Analyzer,该工具会生成磁盘使用情况的可视化图表,方便分析。
# 安装 baobab
sudo apt-get install baobab
# 启动 baobab
baobab
6.2 使用 fdisk
sudo fdisk -l
二、 将非空硬盘分区并挂载到 ubuntu
1. 检查当前硬盘和分区状态
使用 lsblk
或 fdisk
检查硬盘的现有分区布局:
lsblk -o NAME,SIZE,FSTYPE,TYPE,LABEL,UUID,FSAVAIL,FSUSE%,MOUNTPOINT
输出如下,我们发现有一块 477G 的固态硬盘,但是已经分区了,而且只划分了一个区域就占据了所有空间,我们想把这个分区删除然后再创建一个空间为 150G 的分区 nvme0n1p1 ,然后将其挂载到 /home 下。
- 未分区空间:显示为
Free Space
。 - 已分区区域:显示为挂载点或者
TYPE
为part
。
2. 重新分区
使用 fdisk
创建新分区:
①使用硬盘管理工具打开 /dev/nvme0n1 硬盘:
②输入 m 获取帮助
③输入 p
查看现有分区。
④输入 n
创建一个新分区。
I.选择主分区或扩展分区类型(通常选择默认)。
II.设置起始和结束位置(例如,分配剩余的空闲空间)。
⑤输入 w
保存更改并退出。
使用 lsblk 命令检查,一个 150G 的新分区已经划分好了。
格式化新分区:
新分区需要格式化为合适的文件系统,例如 ext4:
sudo mkfs.ext4 /dev/nvme0n1p1
mkfs.ext4
是mkfs
的一个具体实现,专门用于创建 ext4 文件系统。/dev/
nvme0n1p1 是目标分区(第四个主机硬盘的分区)。- 这条命令将 /dev/nvme0n1p1 分区格式化为 ext4 文件系统,所有数据会被清除。
3. 挂载分区到 /home
临时挂载(测试):
①创建挂载点:
sudo mkdir -p /mnt/newhome
②挂载新分区:
sudo mount /dev/nvme0n1p1 /mnt/newhome
③检查是否挂载成功:
lsblk -o NAME,SIZE,FSTYPE,TYPE,LABEL,UUID,FSAVAIL,FSUSE%,MOUNTPOINT
将新分区挂载到 /home
:
①复制现有 /home
数据到新分区,耐心等待复制结束:
sudo rsync -aXS /home/ /mnt/newhome/
rsync
:同步工具。-a
:归档模式,保持文件的权限、时间戳、符号链接等属性。-X
:保留扩展属性(例如setfacl
设置的文件 ACL 权限)。-S
:处理稀疏文件(节省磁盘空间)。/home/
:源目录,表示/home
目录的内容(注意/
表示只复制内容,不包括目录本身)。/mnt/newhome/
:目标目录,表示数据会被复制到这个目录中。
②验证数据是否已完整复制:
diff -r /home/ /mnt/newhome/
-r
:递归比较目录内所有文件和子目录。/home/
和/mnt/newhome/
:源目录和目标目录
- 如果两个目录一致,没有任何输出。
③将当前的 /home
目录重命名为 /home.bak
sudo mv /home /home.bak
- 暂时备份
/home
目录,为挂载新分区到/home
做准备。 - 重命名后,系统不再直接使用旧的
/home
,可以安全测试新挂载点。
④创建新的 /home
挂载点:
sudo mkdir /home
⑤挂载新分区到 /home:
sudo mount /dev/nvme0n1p1 /home
⑥修改 /etc/fstab
以永久挂载: 编辑 /etc/fstab
文件,添加以下内容,保存并退出。
/dev/nvme0n1p1 /home ext4 defaults 0 2
⑦测试挂载:
sudo mount -a
-a
:自动挂载/etc/fstab
文件中配置的所有文件系统。
4. 验证挂载
确保分区正确挂载到 /home
,并且所有用户数据正常:
lsblk -o NAME,SIZE,FSTYPE,TYPE,LABEL,UUID,FSAVAIL,FSUSE%,MOUNTPOINT
df -h /home
确认数据迁移无误后,可以删除旧的 /home.bak
备份
sudo rm -rf /home.bak
参考
Ubuntu新硬盘分区并挂载
Linux命令-自动挂载文件/etc/fstab功能详解[转]
linux下使用fdisk进行磁盘分区详解