一、什么是挂载
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 等。
            
            
              python
              
              
            
          
          # 通过 -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
            
            
              python
              
              
            
          
          df -h
        df(disk free)是一个命令,用于查看文件系统的总空间、已用空间、可用空间和挂载点等信息。- 默认情况下,输出以字节为单位,但不易阅读。使用 
-h参数,可以以更直观的单位(如 GB、MB)显示。 

6.查看磁盘分布
6.1 使用 baobab
安装 Disk Usage Analyzer,该工具会生成磁盘使用情况的可视化图表,方便分析。
            
            
              python
              
              
            
          
          # 安装 baobab
sudo apt-get install baobab
# 启动 baobab
baobab
        
6.2 使用 fdisk
            
            
              python
              
              
            
          
          sudo fdisk -l
        

二、 将非空硬盘分区并挂载到 ubuntu
1. 检查当前硬盘和分区状态
使用 lsblk 或 fdisk 检查硬盘的现有分区布局:
            
            
              python
              
              
            
          
          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:
            
            
              python
              
              
            
          
          sudo mkfs.ext4 /dev/nvme0n1p1
        mkfs.ext4是mkfs的一个具体实现,专门用于创建 ext4 文件系统。/dev/nvme0n1p1是目标分区(第四个主机硬盘的分区)。- 这条命令将 /dev/ nvme0n1p1 分区格式化为 ext4 文件系统,所有数据会被清除。
 

3. 挂载分区到 /home
临时挂载(测试):
①创建挂载点:
            
            
              python
              
              
            
          
          sudo mkdir -p /mnt/newhome
        ②挂载新分区:
            
            
              python
              
              
            
          
          sudo mount /dev/nvme0n1p1 /mnt/newhome
        ③检查是否挂载成功:
            
            
              python
              
              
            
          
          lsblk -o NAME,SIZE,FSTYPE,TYPE,LABEL,UUID,FSAVAIL,FSUSE%,MOUNTPOINT
        
将新分区挂载到 /home:
①复制现有 /home 数据到新分区,耐心等待复制结束:
            
            
              python
              
              
            
          
          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:
            
            
              python
              
              
            
          
          sudo mount /dev/nvme0n1p1 /home
        ⑥修改 /etc/fstab 以永久挂载 : 编辑 /etc/fstab 文件,添加以下内容,保存并退出。
            
            
              python
              
              
            
          
          /dev/nvme0n1p1 /home ext4 defaults 0 2
        
⑦测试挂载:
            
            
              python
              
              
            
          
          sudo mount -a
        -a:自动挂载/etc/fstab文件中配置的所有文件系统。
4. 验证挂载
确保分区正确挂载到 /home,并且所有用户数据正常:
            
            
              python
              
              
            
          
          lsblk -o NAME,SIZE,FSTYPE,TYPE,LABEL,UUID,FSAVAIL,FSUSE%,MOUNTPOINT
        
            
            
              python
              
              
            
          
          df -h /home
        
确认数据迁移无误后,可以删除旧的 /home.bak 备份
            
            
              python
              
              
            
          
          sudo rm -rf /home.bak