Bootstrap

Ubuntu 硬盘分区并挂载

一、什么是挂载

  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进行磁盘分区详解

;