Ubuntu 硬盘分区并挂载

发布于:2024-11-29 ⋅ 阅读:(12) ⋅ 点赞:(0)

一、什么是挂载

  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

        注意:①只有未分配的空间才能进行分区操作!!!②在使用 GParted 在对根目录 / 进行操作时,一定不能在运行的 Ubuntu 系统上直接修改,要使用启动盘,因为在运行的 Ubuntu 系统中根分区正在使用中!!!③GParted 中对一个分区的操作,只能影响到相近的两个分区。

0.代替下面 1 和 2 的更方便的方法

        最近了解到一个更方便的工具 GParted ,可以更加简单的完成下面的 1、检查当前硬盘和分区状态 和 2、重新分区。如果使用这个工具,就不用进行下面的 1 和 2 的操作了。

  • 使用 gparted  检测分区状态:
sudo apt install gparted
sudo gparted

        首先安装并启动 gparted ,右上角选择对应的硬盘,界面如下图所示,可以查看到挂载点和磁盘中各个分区的状态(是否为未分配)。

      ①新建分区

        选中未分配分区,右击选择新建即可创建。创建的同时也完成的新分区的格式化。

        其中文件系统包括:

  • ext4: Linux 系统中最常用的文件系统,适用于存储系统文件和用户数据。
  • ntfs: Windows 操作系统的默认文件系统,具有很好的支持大文件和权限管理的能力。可以在 Windows 和 Linux 系统之间共享数据。
  • linux-swap: Linux 系统的虚拟内存。
  • fat32:较老的文件系统,兼容性非常强,几乎所有操作系统(包括 Windows、Linux 和 macOS)都能读取和写入 FAT32 文件系统。它适用于存储小文件和在不同操作系统间交换数据。

         新建后的效果如下:

        ②调整大小/移动(R)分区

        当没有未分配的分区时,可以通过 调整现有分区的大小(最好是在ubuntu未使用的 windows 的分区) 来释放一些空间从而创建未分配的分区。右击选择调整大小/移动(R)调整该分区的大小:

        新建后的效果如下:

         如果想要恢复:

        ③删除分区

        选中硬盘分区,右击选择删除即可快速将分区恢复为未分配状态。

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.设置起始(下图的 First sector,回车键代表默认)和结束位置(下图的 Last sector),分配剩余的空闲空间。

        ⑤输入 w 保存更改并退出。

         使用 lsblk 命令检查,一个 150G 的未分配的新分区已经划分好了。

        使用 gparted 查看 fdisk创建的新分区。

格式化新分区:

        新分区需要格式化为合适的文件系统,例如 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

三、使用 GParted 对 ubuntu 进行扩容

        该方法适用于想要扩容的分区所在的硬盘上还有空间的情况。

        参考:ubuntu安装与重新分配内存双系统Ubuntu18使用GParted扩容

        ①从 Ubuntu 的安装介质(如 USB 或光盘)启动系统,选择 Try Ubuntu 进入 Live 模式。 不要在运行的 Ubuntu 系统上直接修改 / 的大小。

        ② 在 Live 系统中安装并启动 gparted

sudo apt install gparted
sudo gparted

        ③使用上面提到的 调整大小/移动(R) 分区的操作创建未分配的分区,然后再使用调整大小/移动(R) 分区的操作将未分配的分区和想要扩容的分区合并。

        ④扩容完成后,运行以下命令更新分区表

sudo partprobe

        当使用分区工具(如 gpartedfdiskparted)对磁盘进行分区操作(如创建、删除、调整分区大小等)后,操作系统可能不会立即识别新的分区结构。partprobe 命令会让操作系统重新加载磁盘的分区表,以确保新的分区信息能够被系统识别。 

参考

        Ubuntu新硬盘分区并挂载

        Linux命令-自动挂载文件/etc/fstab功能详解[转]

        linux下使用fdisk进行磁盘分区详解