Linux文件、磁盘以及扩容方式


预备知识

文件系统类型

通过 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:\UsersC:\users 是同一路径
- 使用反斜杠 \ 作为路径分隔符
- 支持快捷方式(功能类似于符号链接)

Linux 根目录

根据 Filesystem Hierarchy Standard (FHS),Linux 的根目录 / 下存在一系列标准化的目录,以下是常见目录及其作用说明。

1. /bin (Binary)

  • 存放系统启动时或单用户模式下的基本用户命令。
  • 包括常用的命令,如 lscpmvcat 等。
  • 可供所有用户访问。

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 或更多:需要处理大量临时文件(如视频编辑、编译大型项目)。
  • 文件系统ext4tmpfs(内存文件系统)。

8. 数据分区(可选)

  • 用途:独立存储大文件或共享数据(如 /mnt/data)。
  • 建议大小:根据需求调整。

分区建议

  1. 根分区大小要合理
    • 根分区存放系统和软件文件,除单独分配空间的挂载点,其余内容都存储在根分区中。
    • 如果空间不足,可能导致系统无法更新或安装新软件。
  2. 优先为 /home 留出空间
    • /home 是用户数据的主要存储位置,建议分配尽可能大的空间。
  3. 使用 LVM
    • 如果磁盘使用量不确定,使用 LVM 便于后续扩展。
  4. EFI 分区共享
    • 如果有多系统(如 Windows 和 Linux),可以共享一个 /boot/efi 分区。
  5. 根据用途优化分区
    • 桌面用户可以简化分区结构。
    • 服务器或开发环境可以根据需要细化分区。

扩容方式

新建磁盘分区并挂载到新的挂载点上

主要使用的命令:fdiskmkfsmountumountdflsblk 1. 查看磁盘

lsblk
可以看出里面有三个硬盘:sda/nvme0n1/nvme1n1,目前我的Linux文件系统全部都在sda中的部分分区中,另外nvme0n1只设置了一个/boot/efi的挂载点。现在我想从nvme1n1中分配一部分空间给sda/ada6的/home分区。 2. 磁盘分区并挂载: 首先可以查看一下这个磁盘的使用情况
sudo fdisk -l /dev/nvme1n1
这个盘之前在windows系统上使用,目前的分区也已经占满了全部空间,所以需要删除一些分区或者直接使用之前的分区,如果要删除的话我们可以重新对这个盘进行分区,借助fdisk或者parted应该都可以: - 删除分区:
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的和)

  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环境或者单用户模式比较方便。
  • 如果之前临时挂载点设置了永久挂载,需要卸载临时的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目录下内容是否是在一个分区下:
    df /mnt/new_home
    检查清楚后可以删除/mnt/new_home目录下的内容。

文章作者: 庞贝堡垒
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 庞贝堡垒 !
评论
  目录