预备知识
文件系统类型
通过
df -T /home
或者lsblk -f
命令可以查看文件系统类型。
- ext4:Linux 常用的文件系统,支持大文件和高性能。
- XFS:用于高性能、高并发的场景。
- btrfs:支持高级功能,如快照和子卷。
- FAT32 和 NTFS:可用作跨平台兼容,但通常用于外部设备。
挂载点
- 挂载点:将磁盘分区与目录关联,使得目录中的文件实际存储在对应的磁盘分区中。 #### 挂载与卸载
- 挂载:
sudo mount /dev/sdXn /mnt/new_home
, /dev/sdXn 是分区路径,/mnt/new_home 是临时挂载点。 - 卸载:
sudo umount /mnt/new_home
。
查看当钱挂载情况
mount | grep /home
lsblk
持久化挂载配置
编辑 /etc/fstab,添加新分区的信息,例如:
UUID=xxxxx-xxxxx-xxxxx /home ext4 defaults 0 2
使用
blkid
获取分区 UUID。 UUID=xxxxx-xxxxx-xxxxx 是分区的
UUID,/home 是挂载点,ext4 是文件系统类型,defaults 是默认挂载选项,0
是备份级别,2 是文件系统检查顺序。
分区表类型
分区表类型决定了磁盘分区的布局方式 - MBR(Master Boot Record): - 支持最大 2TB 磁盘,分区数量限制为 4 个主分区(或使用扩展分区)。 - 较旧的系统中常见。 - GPT(GUID Partition Table): - 支持大于 2TB 的磁盘,分区数量几乎无限制。 - 推荐使用 GPT,尤其是现代系统和大容量磁盘。
如何查看分区表类型:
sudo fdisk -l
输出中会显示磁盘使用的分区表类型(MBR 或 GPT)。
逻辑卷管理(LVM)
LVM(Logical Volume Manager)提供了灵活的存储管理能力,是现代 Linux
系统推荐的存储管理工具。 #### LVM 组成:
- Physical Volume (PV):物理卷,对应实际磁盘分区(如 /dev/sda1)。 -
Volume Group (VG):卷组,将多个 PV 组合成一个存储池。 - Logical Volume
(LV):逻辑卷,在卷组中划分出的存储块,类似于分区。 #### LVM 的优势: -
动态调整:支持动态调整(扩展或缩小)逻辑卷。 -
存储池:可以将多个物理磁盘组合成一个逻辑存储池。 -
快照和备份:提供快照和备份功能。 #### 如何查看 LVM 配置
sudo vgdisplay
sudo lvdisplay
块设备路径
块设备路径是 Linux 用于标识磁盘和分区的名称。 #### 路径格式 - /dev/sdX:传统磁盘路径,X 是磁盘序号。 - /dev/nvmeXnY:NVMe 磁盘路径,X 是设备号,Y 是分区号。 - /dev/mapper/vg_name-lv_name:LVM 的逻辑卷路径。 #### 如何查看块设备路径:
lsblk 查看磁盘和分区的结构。
blkid 查看分区的文件系统和 UUID。
可以通过fdisk / parted
等工具管理分区。
Linux和Windows在磁盘分区管理上的区别
分区类型和布局
系统 | 分区类型 | 分区结构 | 挂载点 |
---|---|---|---|
Linux | -
使用主分区(Primary)、扩展分区(Extended)和逻辑分区(Logical)的结构 - GPT(GUID分区表)支持 128 个以上的分区 |
- 分区通常用设备文件表示,如
/dev/sda1 (表示第一个硬盘的第一个分区)- 文件系统可以跨越多个分区(如通过 LVM 实现逻辑卷管理) |
- 无固定的驱动器符号(如 Windows 的 C:、D:) - 所有分区整合到一个目录树下,例如根目录 / |
Windows | - 支持 MBR(最多 4 个主分区)和 GPT(支持更多分区) | - 分区通常表示为独立的驱动器符号,如 C:、D: | - 每个分区是独立的逻辑单元 - 支持通过挂载点功能将分区挂载为 NTFS 文件系统下的文件夹,但不常用 |
文件系统
系统 | 常见文件系统 | 灵活性 |
---|---|---|
Linux | - ext4: 现代 Linux
的默认文件系统,支持大文件和高性能 - XFS: 用于高性能、高并发的场景 - btrfs: 支持高级功能,如快照和子卷 - FAT32 和 NTFS: 可用作跨平台兼容,但通常用于外部设备 |
- 多种文件系统可选,支持格式化为几乎任何文件系统 - 支持网络文件系统(如 NFS、CIFS) |
Windows | - NTFS: 默认的主文件系统,支持高性能和安全功能 - FAT32 和 exFAT: 用于外部设备或某些特殊用途 |
- 不支持直接格式化为 Linux 原生文件系统(如 ext4) - 文件系统选项相对较少 |
引导加载
系统 | 特点 |
---|---|
Linux | - 使用 GRUB(或其他引导程序)管理启动项 - 支持从多种分区或系统启动,灵活性高 - 根分区(/)和引导分区(如 /boot)可以分离 - 支持双系统或多系统并存 |
Windows | - 使用 Windows Boot Manager 管理引导 - 通常依赖特定的系统分区(System Reserved 或 EFI 分区) - 双系统支持有限,需第三方引导管理器(如 GRUB)协助 |
分区工具
系统 | 特点 |
---|---|
Linux | - 命令行工具丰富: - fdisk: 适用于 MBR 分区表 - gdisk: 适用于 GPT 分区表 - parted 和 gparted: 高级分区管理工具 - 灵活支持命令行和图形界面 - 提供 LVM(逻辑卷管理)支持,便于动态调整分区大小 |
Windows | - 图形化工具为主: - 磁盘管理(Disk Management)是主要的分区工具 - 命令行工具如 diskpart - 相较 Linux,动态调整分区大小的灵活性较低 |
文件路径和符号
系统 | 特点 |
---|---|
Linux | - 文件路径区分大小写,例如 /home 和 /Home
是不同的路径- 使用正斜杠 / 作为路径分隔符- 支持符号链接和硬链接 |
Windows | - 文件路径不区分大小写,例如 C:\Users 和
C:\users 是同一路径- 使用反斜杠 \
作为路径分隔符- 支持快捷方式(功能类似于符号链接) |
Linux 根目录
根据 Filesystem Hierarchy Standard (FHS),Linux
的根目录 /
下存在一系列标准化的目录,以下是常见目录及其作用说明。
1. /bin
(Binary)
- 存放系统启动时或单用户模式下的基本用户命令。
- 包括常用的命令,如
ls
、cp
、mv
、cat
等。 - 可供所有用户访问。
2. /boot
(Boot)
- 存放系统启动所需的文件,包括引导加载程序(如 GRUB)的配置文件和内核文件。
- 常见文件:
vmlinuz
:压缩内核文件。initrd.img
:初始 RAM 磁盘镜像。grub
目录:GRUB 引导加载程序的配置文件。
3. /dev
(Device)
- 包含设备文件,表示系统中的硬件设备。
- 设备文件通常通过
/dev
提供接口,例如:/dev/sda
:第一个 SATA 硬盘。/dev/null
:空设备。/dev/tty
:终端接口。
4. /etc
(Et Cetera)
- 存放系统配置文件。
- 通常只由系统管理员(
root
用户)修改。 - 常见文件和目录:
/etc/passwd
:用户信息。/etc/fstab
:文件系统挂载信息。/etc/network/interfaces
:网络配置。
5. /home
- 存放普通用户的主目录,每个用户一个子目录。
- 示例:
/home/user1
:用户user1
的主目录。
- 用户可以在其主目录中存储文件、配置数据等。
6. /lib
(Library)
- 存放系统运行所需的共享库(类似于 Windows 的
.dll
文件)。 - 包括
/bin
和/sbin
中的可执行文件所依赖的库。
7. /media
- 挂载点目录,用于自动挂载外部设备(如 USB 驱动器、光盘)。
- 当插入外部存储设备时,系统会在
/media
下创建一个挂载点。
8. /mnt
- 临时挂载点目录。
- 系统管理员可以手动挂载文件系统到该目录下。
- 用于临时挂载而非自动化。
9. /opt
(Optional)
- 存放可选的第三方软件包。
- 一些软件会安装在
/opt
下,例如/opt/myapp
。
10. /proc
- 虚拟文件系统,存储系统内核和进程相关信息。
- 动态生成,不占用实际磁盘空间。
- 示例:
/proc/cpuinfo
:CPU 信息。/proc/meminfo
:内存使用信息。
11. /root
root
用户的主目录,与普通用户的/home/username
对应。- 通常只有
root
用户有权限访问。 - 需要通过
sudo passwd root
设置密码才能登录。
12. /run
- 临时文件系统,用于存储系统运行时生成的文件(如进程 ID 文件、套接字)。
- 系统重启后该目录会被清空。
13. /sbin
(System
Binary)
- 存放系统管理员使用的基本命令,例如:
fsck
:文件系统检查。reboot
:重启系统。
- 一般普通用户无权直接执行。
14. /srv
(Service)
- 存储与系统提供的服务(如 HTTP、FTP)相关的数据。
- 示例:
/srv/www
可能存放一个 Web 服务器的数据。
15. /sys
- 虚拟文件系统,提供内核和硬件设备的信息。
- 和
/proc
类似,但更注重设备相关的信息。
16. /tmp
(Temporary)
- 用于存储临时文件。
- 文件通常会在系统重启时清空。
17. /usr
(User System
Resources)
- 包含与用户相关的文件和资源:
/usr/bin
:用户可用的命令。/usr/lib
:共享库。/usr/share
:共享数据(如文档、图标)。/usr/local
:本地安装的软件。
18. /var
(Variable)
- 存放经常变化的文件。
- 示例:
/var/log
:日志文件。/var/spool
:任务队列(如打印任务)。
Ubuntu 系统分区建议
基本分区方案
通常情况下,建议以下几个分区:
1. /
(根分区)
- 用途:存放操作系统的核心文件和默认安装的软件。
- 建议大小:
- 20-30GB:普通桌面用户。
- 40-50GB:需要安装大量软件或开发环境的用户。
- 文件系统:
ext4
(推荐)。 - 注意:所有未分配到其他分区的内容都会默认存储在根分区中。
2. swap
(交换分区)
- 用途:虚拟内存,用于内存不足时提供临时存储;也用于休眠功能。
- 建议大小:
- 如果 不使用休眠功能:
- RAM < 4GB:等于2倍RAM大小。
- RAM 在 4-8GB:等于RAM大小。
- RAM > 8GB:4-8GB 通常足够。
- 如果 使用休眠功能:
- 至少等于RAM大小。
- 如果 不使用休眠功能:
- 文件系统:专用交换空间,无文件系统。
- 注意:现代 Ubuntu 支持使用交换文件(无需单独分区),可在安装后配置。
3. /home
(用户目录)
- 用途:存储用户数据(如文档、配置、下载等),便于系统重装时保留用户数据。
- 建议大小:
- 普通桌面用户:50GB 或更多。
- 如果硬盘空间充裕,可分配 100GB+,以支持长期使用。
- 服务器或开发用户:按实际需求分配。
- 文件系统:
ext4
(推荐)。
4. /boot
(可选)
- 用途:存放引导加载程序和内核文件。
- 建议大小:
- 500MB-1GB:普通用户。
- 1-2GB:如果需要保留多个内核版本。
- 文件系统:
ext4
。
5. /efi
(如果是 UEFI
系统)
- 用途:存放 UEFI 引导程序。
- 建议大小:
- 300-500MB 通常足够。
- 文件系统:
FAT32
。 - 注意:如果是多系统环境,EFI 分区可以共享。
6. /var
(可选)
- 用途:存放日志文件、缓存数据、邮件队列等(特别是服务器环境)。
- 建议大小:
- 5-10GB:普通用户。
- 20-50GB:如果运行数据库、Web服务器或其他高日志生成服务。
- 文件系统:
ext4
。
7. /tmp
(可选)
- 用途:存放临时文件。
- 建议大小:
- 2-4GB:普通用户。
- 10GB 或更多:需要处理大量临时文件(如视频编辑、编译大型项目)。
- 文件系统:
ext4
或tmpfs
(内存文件系统)。
8. 数据分区(可选)
- 用途:独立存储大文件或共享数据(如
/mnt/data
)。 - 建议大小:根据需求调整。
分区建议
- 根分区大小要合理:
- 根分区存放系统和软件文件,除单独分配空间的挂载点,其余内容都存储在根分区中。
- 如果空间不足,可能导致系统无法更新或安装新软件。
- 优先为
/home
留出空间:/home
是用户数据的主要存储位置,建议分配尽可能大的空间。
- 使用 LVM:
- 如果磁盘使用量不确定,使用 LVM 便于后续扩展。
- EFI 分区共享:
- 如果有多系统(如 Windows 和 Linux),可以共享一个
/boot/efi
分区。
- 如果有多系统(如 Windows 和 Linux),可以共享一个
- 根据用途优化分区:
- 桌面用户可以简化分区结构。
- 服务器或开发环境可以根据需要细化分区。
扩容方式
新建磁盘分区并挂载到新的挂载点上
主要使用的命令:fdisk
、mkfs
、mount
、umount
、df
、lsblk
1. 查看磁盘:
lsblk

sudo fdisk -l /dev/nvme1n1

sudo fdisk /dev/nvme1n1
- 输入 d, 逐一删除所有分区。 - 输入 w
保存更改。 - 新建分区 sudo fdisk /dev/nvme1n1
- 输入 n 创建新分区 -
按提示选择分区类型(通常是主分区)。 -
提供起始扇区和结束扇区(默认值即可使用未分配的全部空间)。 -
确认并完成创建。 - 格式化分区 sudo mkfs.ext4 /dev/nvme1n1p1
- 挂载分区 sudo mount /dev/nvme1n1 /mnt/new_home
注意前面我们说过/mnt是临时挂载点,我们可以新建一个/home/data挂载点来实现对/home目录的扩容,但是其实这样在系统重启后依旧是临时的,每次都重启需要手动挂载才能正常使用分区内容。
- 持久化挂载 - 获取分区 UUID: sudo blkid /dev/nvme1n1p1
- 编辑 /etc/fstab 文件:
添加以下行,将新分区挂载到 /home/data: UUID=xxxx-xxxx-xxxx-xxxx /home/data ext4 defaults 0 2
- 测试 /etc/fstab
配置: sudo mount -a
- 验证是否挂载:df -h
3.
新挂载点权限设置 上面的案例中/home 下的子目录(
/home/data)会独立使用新分区的存储空间,不会直接扩展 /home
主目录的可用空间。 默认情况下,挂载后的 /home/data 可能由 root
用户拥有。根据需要修改目录权限: sudo chown -R <username>:<group> /home/data
或者
chmod -R 权限 /home/data
(权限由三位数字组成,分别对应所有者/组/其他用户的权限,单个数字权限为r=4,w=2,x=1的和)
- 数据迁移 如果 /home 中已有需要迁移到 /home/data 的数据,可以使用
rsync 进行迁移:
sudo rsync -av /home/old_data /home/data
LVM扩容
更新中。。。。
直接扩容现有分区
准备
- 备份数据
调整分区可能会导致数据丢失,建议备份 /home 分区和其他重要数据。
sudo rsync -aXS /home/ /backup/home/
- 查看分区布局 lsblk
sudo fdisk -l
看看 /home 分区(如
/dev/sda6)的后方存在未分配空间。 - 确保分区未挂载: - 如果 /home
是活动分区,需要在单用户模式或通过 Live CD/USB 执行操作。 - 在 Live
环境中挂载根分区,并使用 chroot 进入系统环境。
如果/home 分区(如 /dev/sda6)的后方位置存在未分配空间
因为我是想在在另一个磁盘上扩充,所以后面的方法不适用于我的这个需求,如果满足挂载/home的后方还有连续空间的话优先推荐这种方式,可以直接扩容
/dev/sda6 分区大小即可,有以下两种方式: #### 使用gparted(图形化界面)
gparted 是调整分区的图形化工具,操作简单且更安全。 -
安装:sudo apt install gparted
-
启动:sudo gparted
- 选择 /dev/sda6 分区,右键选择
Resize/Move。
使用fdisk
- 启动 fdisk:
sudo fdisk /dev/sda
- 删除并重新创建分区:
- 输入 d,选择 /dev/sda6 分区。
- 输入 n,创建新分区,起始扇区与旧分区相同,结束扇区扩大到未分配空间末尾。
- 输入 w 保存更改。
- 刷新分区表:
sudo partprobe
#### 扩展文件系统 在采用上面的某一种方式后调整分区后,文件系统大小仍然是原来的大小,需要扩展文件系统以使用新的空间。 - 扩展 ext4 文件系统
如果 /home 分区是 ext4,使用 resize2fs 扩展:
sudo resize2fs /dev/sda6
```
- 扩展 xfs 文件系统
如果 /home 分区是 xfs,确保分区已挂载,然后使用 xfs_growfs 扩展:
```shell
sudo mount /dev/sda6 /home
sudo xfs_growfs /home
验证
- 检查分区大小是否扩展成功:
df -h /home
- 确认分区的文件系统健康状态:
sudo fsck /dev/sda6
如果/home 分区(如 /dev/sda6)的后方位置不存在未分配空间
如果原有的留给/home挂载点的分区已经空间不足且原来空间很小,可以考虑换一个更大的硬盘然后对/home进行迁移。
#### 切换用户
因为我们现在要扩充/home分区,所以需要切换到root用户下进行操作,使用命令sudo -i
切换到root用户。
另外,Live环境或者单用户模式也都可以。
准备新分区
- 如果新硬盘还没有新分区的话可以新建一个分区:
sudo fdisk /dev/nvme1n1
, 输入n新建分区,输入w保存更改。 - 格式化分区:
sudo mkfs.ext4 /dev/nvme1n1p1
- 挂载分区:
sudo mount /dev/nvme1n1p1 /mnt/new_home
, 将其挂载到/mnt/new_home目录下。 #### 迁移数据 - 迁移数据:
sudo rsync -aXS /home/ /mnt/new_home/
非常重要,迁移完成后一定要检查一下数据是否完整,确认无误后再进行下一步操作。 -a:归档模式,保留权限、时间戳等。 -X:保留扩展属性。-S:处理稀疏文件。
更新挂载点
- 卸载原有 /home 分区:
sudo umount /home
- 此时可能遇到/home忙碌的问题,可以使用
lsof /home
查看一下/home目录下的进程,但是如果有系统进程的话就无法卸载了,所以还是Live环境或者单用户模式比较方便。
- 此时可能遇到/home忙碌的问题,可以使用
- 如果之前临时挂载点设置了永久挂载,需要卸载临时的new_home:
sudo umount /mnt/new_home
,这个如果不卸载的话会可能导致/home和new_home都在同一个分区下,非常不安全。 - 挂载新分区到
/home:
sudo mount /dev/nvme1n1p1 /home
- 获取新分区 UUID:
sudo blkid /dev/nvme1n1p1
- 持久化挂载:编辑 /etc/fstab,添加新分区的 UUID 信息。
#### 验证UUID=xxxx-xxxx-xxxx-xxxx /home ext4 defaults 0 2
- /home 分区是否正常挂载:
df -h /home
sudo mount -a df -h /home
- 旧的临时目录下内容和新的/home目录下内容是否是在一个分区下:
检查清楚后可以删除/mnt/new_home目录下的内容。df /mnt/new_home