|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
引言
磁盘分区与挂载是Linux系统管理中的基础且关键的操作,对于Ubuntu用户来说,掌握这些技能可以帮助你更有效地管理存储空间,优化系统性能,并确保数据的安全性。本指南将带你从基础概念开始,逐步深入到实际操作,让你能够熟练地管理Ubuntu系统的磁盘空间。
一、基础概念
1. 什么是磁盘分区
磁盘分区是将物理硬盘划分为多个逻辑部分的过程,每个分区可以被视为独立的磁盘。这样做的好处包括:
• 数据组织:可以将操作系统、应用程序和个人数据分开存放
• 多系统安装:可以在同一硬盘上安装多个操作系统
• 性能优化:不同分区可以使用不同的文件系统,优化特定类型数据的存储和访问
• 安全性:一个分区的问题不会影响其他分区的数据
• 备份简化:可以针对重要数据分区进行单独备份
2. 什么是挂载
挂载是将一个分区(或存储设备)关联到Linux目录树中的某个目录的过程。挂载点就是一个目录,通过它你可以访问分区中的内容。在Linux中,一切皆文件,包括硬件设备,它们都通过文件系统层次结构访问。
例如,当你将一个分区挂载到/home目录时,访问/home实际上是在访问该分区上的内容。
3. 文件系统类型
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构。Ubuntu支持多种文件系统类型,常见的有:
• ext4:Ubuntu的默认文件系统,提供了良好的性能、可靠性和功能
• btrfs:现代文件系统,支持快照、压缩、校验和等高级功能
• xfs:高性能文件系统,特别适合大文件和高并发访问
• zfs:高级文件系统,提供数据完整性保护、快照、压缩等功能
• ntfs:Windows主要文件系统,Ubuntu可以读写
• fat32/vfat:兼容性好的文件系统,适用于USB闪存驱动器等设备
4. Ubuntu的目录结构
理解Ubuntu的目录结构对于合理规划磁盘分区很重要。主要目录包括:
• /:根目录,整个文件系统的起点
• /bin:基本命令二进制文件
• /boot:启动加载器文件
• /dev:设备文件
• /etc:系统配置文件
• /home:用户主目录
• /lib:系统库文件
• /mnt:临时挂载点
• /opt:可选软件包
• /proc:进程信息
• /root:root用户主目录
• /run:运行时数据
• /sbin:系统管理员二进制文件
• /srv:服务数据
• /sys:系统文件
• /tmp:临时文件
• /usr:用户程序
• /var:变量数据,如日志、缓存等
二、磁盘分区基础
1. 分区类型
在传统的MBR(Master Boot Record)分区表中,有三种类型的分区:
• 主分区(Primary Partition):硬盘上可以直接创建的分区,最多可以有4个主分区。
• 扩展分区(Extended Partition):一种特殊的主分区,可以包含多个逻辑分区。一个硬盘只能有一个扩展分区。
• 逻辑分区(Logical Partition):在扩展分区内创建的分区,数量可以很多。
在现代的GPT(GUID Partition Table)分区表中,这些概念有所不同。GPT支持多达128个分区,没有主分区和扩展分区的区别,所有分区本质上都是平等的。
2. 分区表格式
• 传统分区表格式
• 支持最大2TB磁盘空间
• 最多4个主分区
• 存储在磁盘的第一个扇区(512字节)
• 兼容性好,适合旧系统
• 现代分区表格式
• 支持极大磁盘(理论上可达9.4ZB)
• 最多128个分区
• 存储在磁盘的多个位置,有备份,更可靠
• 支持UEFI启动
• 推荐在新系统上使用
3. 分区命名约定
在Ubuntu中,磁盘设备通常位于/dev目录下,命名规则如下:
• IDE/PATA硬盘:/dev/hda,/dev/hdb, …
• SATA/SCSI/USB硬盘:/dev/sda,/dev/sdb, …
• NVMe硬盘:/dev/nvme0n1,/dev/nvme1n1, …
分区编号从1开始:
• 第一块SATA硬盘的第一个分区:/dev/sda1
• 第一块SATA硬盘的第二个分区:/dev/sda2
• 第二块SATA硬盘的第一个分区:/dev/sdb1
对于NVMe硬盘,命名稍有不同:
• 第一块NVMe硬盘的第一个分区:/dev/nvme0n1p1
• 第一块NVMe硬盘的第二个分区:/dev/nvme0n1p2
三、磁盘管理工具介绍
1. fdisk
fdisk是一个经典的命令行分区工具,主要用于MBR分区表,但也支持GPT。
基本用法:
- sudo fdisk -l # 列出所有磁盘和分区
- sudo fdisk /dev/sda # 操作指定磁盘
复制代码
在fdisk交互界面中,常用命令:
• m:显示帮助
• p:显示分区表
• n:创建新分区
• d:删除分区
• t:更改分区类型
• w:保存更改并退出
• q:不保存更改退出
2. parted
parted是一个更现代的分区工具,支持MBR和GPT分区表,功能比fdisk更强大。
基本用法:
- sudo parted /dev/sda # 操作指定磁盘
复制代码
在parted交互界面中,常用命令:
• help:显示帮助
• print:显示分区表
• mklabel:创建新的分区表(gpt或msdos)
• mkpart:创建新分区
• rm:删除分区
• resizepart:调整分区大小
• quit:退出
3. GParted
GParted是一个图形化的分区工具,适合不喜欢命令行的用户。它提供了直观的界面来创建、删除、调整分区大小等操作。
安装GParted:
- sudo apt update
- sudo apt install gparted
复制代码
启动GParted:
四、实际操作:磁盘分区
1. 查看当前磁盘和分区情况
lsblk命令以树状结构列出块设备:
输出示例:
- NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
- sda 8:0 0 238.5G 0 disk
- ├─sda1 8:1 0 512M 0 part /boot/efi
- └─sda2 8:2 0 238G 0 part /
- sdb 8:16 0 931.5G 0 disk
- └─sdb1 8:17 0 931.5G 0 part /home
复制代码
fdisk -l命令提供更详细的分区信息:
输出示例:
- Disk /dev/sda: 238.5 GiB, 256060514304 bytes, 500118192 sectors
- Disk model: Samsung SSD 860
- Units: sectors of 1 * 512 = 512 bytes
- Sector size (logical/physical): 512 bytes / 512 bytes
- I/O size (minimum/optimal): 512 bytes / 512 bytes
- Disklabel type: gpt
- Disk identifier: 12345678-1234-1234-1234-123456789012
- Device Start End Sectors Size Type
- /dev/sda1 2048 1050623 1048576 512M EFI System
- /dev/sda2 1050624 500117503 499066880 238G Linux filesystem
复制代码
df命令显示已挂载分区的磁盘空间使用情况:
输出示例:
- Filesystem Size Used Avail Use% Mounted on
- /dev/sda2 238G 15G 211G 7% /
- /dev/sdb1 916G 245G 672G 27% /home
复制代码
2. 创建新分区
假设我们有一块新硬盘/dev/sdc,我们想在上面创建一个新分区。
在fdisk交互界面中:
1. 输入n创建新分区
2. 选择分区类型(主分区p或逻辑分区l)
3. 选择分区号(默认即可)
4. 设置起始扇区(默认即可)
5. 设置结束扇区或分区大小(例如+10G表示10GB)
6. 输入w保存更改并退出
在parted交互界面中:
1. 如果是新磁盘,先创建分区表:mklabel gpt
2. 创建新分区:mkpart primary ext4 0% 100%(使用整个磁盘)或者指定大小:mkpart primary ext4 0% 10GB(创建10GB分区)
3. 或者指定大小:mkpart primary ext4 0% 10GB(创建10GB分区)
4. 输入quit退出
• 或者指定大小:mkpart primary ext4 0% 10GB(创建10GB分区)
3. 删除分区
在fdisk交互界面中:
1. 输入p查看分区表,确认要删除的分区号
2. 输入d删除分区
3. 输入分区号
4. 输入w保存更改并退出
在parted交互界面中:
1. 输入print查看分区表,确认要删除的分区号
2. 输入rm 1(假设删除分区1)
3. 输入quit退出
4. 调整分区大小
调整分区大小是一个有风险的操作,建议先备份重要数据。
1. 启动 GParted:sudo gparted
2. 从右上角选择要操作的磁盘
3. 右键点击要调整的分区,选择”调整大小/移动”
4. 拖动分区边缘或输入新的大小
5. 点击”调整大小/移动”按钮
6. 点击绿色对勾应用所有操作
在parted交互界面中:
1. 输入print查看分区表,确认要调整的分区号
2. 输入resizepart 1(假设调整分区1)
3. 输入新的结束位置(例如10GB)
4. 输入quit退出
注意:调整分区大小后,还需要调整文件系统大小,这需要使用特定于文件系统的工具,如resize2fs(对于ext文件系统)。
五、实际操作:格式化分区
创建分区后,需要将其格式化为特定的文件系统才能使用。
1. 选择文件系统
根据你的需求选择合适的文件系统:
• ext4:通用选择,适合大多数情况
• btrfs:需要快照、压缩等高级功能时
• xfs:大文件存储、高并发访问场景
• ntfs:需要与Windows系统共享数据时
2. 格式化命令和选项
常用选项:
• -L label:设置卷标
• -m percentage:为root用户保留的块百分比(默认5%)
• -j:创建日志(ext4默认已启用)
示例:
- sudo mkfs.ext4 -L "Data" -m 1 /dev/sdc1
复制代码- sudo mkfs.btrfs /dev/sdc1
复制代码
常用选项:
• -L label:设置卷标
• -d type:数据配置(如single, dup, raid0, raid1等)
• -m type:元数据配置(如single, dup, raid0, raid1等)
示例:
- sudo mkfs.btrfs -L "Data" -d single -m dup /dev/sdc1
复制代码
常用选项:
• -L label:设置卷标
• -f:强制格式化(即使磁盘已有文件系统)
示例:
- sudo mkfs.xfs -L "Data" -f /dev/sdc1
复制代码
首先安装ntfs-3g:
- sudo apt update
- sudo apt install ntfs-3g
复制代码
然后格式化:
常用选项:
• -L label:设置卷标
• -Q:快速格式化
示例:
- sudo mkfs.ntfs -L "Data" -Q /dev/sdc1
复制代码
六、实际操作:挂载分区
格式化分区后,需要将其挂载到文件系统中才能访问。
1. 临时挂载
临时挂载在系统重启后不会保留。
首先创建一个目录作为挂载点:
- sudo mount /dev/sdc1 /mnt/data
复制代码- df -h /mnt/data
- ls /mnt/data
复制代码
如果设备繁忙,可以使用-l选项延迟卸载:
2. 永久挂载(修改/etc/fstab)
要使分区在系统启动时自动挂载,需要编辑/etc/fstab文件。
- sudo cp /etc/fstab /etc/fstab.bak
复制代码
在文件末尾添加一行,格式为:
- 设备文件 挂载点 文件系统类型 挂载选项 转储频率 文件系统检查顺序
复制代码
示例:
- /dev/sdc1 /mnt/data ext4 defaults 0 2
复制代码
• 设备文件:可以是设备路径(如/dev/sdc1)、UUID或LABEL
• 挂载点:挂载目录路径
• 文件系统类型:如 ext4, btrfs, xfs, ntfs 等
• 挂载选项:多个选项用逗号分隔,常用选项:defaults:使用默认选项(rw, suid, dev, exec, auto, nouser, async)ro:只读挂载rw:读写挂载noauto:启动时不自动挂载user:允许普通用户挂载noexec:不允许执行二进制文件nosuid:不允许SUID和SGID位生效
• defaults:使用默认选项(rw, suid, dev, exec, auto, nouser, async)
• ro:只读挂载
• rw:读写挂载
• noauto:启动时不自动挂载
• user:允许普通用户挂载
• noexec:不允许执行二进制文件
• nosuid:不允许SUID和SGID位生效
• 转储频率:0表示不转储,1表示每日转储
• 文件系统检查顺序:0表示不检查,1表示优先检查(通常是根分区),2表示在根分区之后检查
• defaults:使用默认选项(rw, suid, dev, exec, auto, nouser, async)
• ro:只读挂载
• rw:读写挂载
• noauto:启动时不自动挂载
• user:允许普通用户挂载
• noexec:不允许执行二进制文件
• nosuid:不允许SUID和SGID位生效
使用设备路径(如/dev/sdc1)可能在设备添加或移除时发生变化,建议使用UUID或LABEL。
获取UUID:
输出示例:
- /dev/sdc1: UUID="12345678-1234-1234-1234-123456789012" TYPE="ext4" PARTUUID="12345678-1234-1234-1234-123456789012"
复制代码
使用UUID的fstab条目:
- UUID=12345678-1234-1234-1234-123456789012 /mnt/data ext4 defaults 0 2
复制代码
获取LABEL:
或使用blkid命令:
- sudo blkid -o value -s LABEL /dev/sdc1
复制代码
使用LABEL的fstab条目:
- LABEL=Data /mnt/data ext4 defaults 0 2
复制代码
编辑fstab文件后,可以重新加载以测试是否有错误:
如果没有错误信息,说明fstab文件语法正确。然后可以重启系统验证自动挂载是否正常工作。
3. 挂载选项
挂载选项提供了对文件系统行为的精细控制。以下是一些常用的挂载选项:
• noatime:不更新文件访问时间,可以提高性能
• nodiratime:不更新目录访问时间
• data=writeback:异步写入元数据,提高性能但风险稍高(仅ext3/ext4)
• barrier=0:禁用写入屏障,提高性能但可能在断电时导致数据损坏(仅ext3/ext4)
• commit=nr_sec:指定数据写入磁盘的频率(秒),增加数值可提高性能但降低数据安全性(仅ext3/ext4)
• data=journal:所有数据和元数据都先写入日志,最安全但性能最低(仅ext3/ext4)
• data=ordered:默认模式,元数据写入日志,数据直接写入磁盘(仅ext3/ext4)
• barrier=1:启用写入屏障,提高数据安全性但可能降低性能(仅ext3/ext4)
• nosuid:不允许SUID和SGID位生效
• nodev:不允许设备文件
• noexec:不允许执行二进制文件
• ro:只读挂载
• user:允许普通用户挂载/卸载
• users:允许所有用户挂载/卸载
• nouser:只有root可以挂载/卸载(默认)
• auto:使用mount -a时自动挂载(默认)
• noauto:不自动挂载
• defaults:使用默认选项(rw, suid, dev, exec, auto, nouser, async)
- UUID=12345678-1234-1234-1234-123456789012 /mnt/data ext4 noatime,nosuid,nodev,noexec 0 2
复制代码
这个示例挂载了一个ext4文件系统,不更新访问时间,不允许SUID/SGID、设备文件和二进制文件执行。
七、高级主题
1. LVM(逻辑卷管理)
LVM(Logical Volume Manager)是一种更灵活的磁盘管理方式,它提供了在物理磁盘之上创建逻辑卷的能力。
• 物理卷(PV, Physical Volume):可以是整个磁盘、分区或其他块设备
• 卷组(VG, Volume Group):由一个或多个物理卷组成
• 逻辑卷(LV, Logical Volume):在卷组上创建的逻辑分区,可以当作普通分区使用
- sudo apt update
- sudo apt install lvm2
复制代码- sudo vgcreate data_vg /dev/sdc1
复制代码- sudo lvcreate -L 10G -n data_lv data_vg
复制代码- sudo mkfs.ext4 /dev/data_vg/data_lv
复制代码- sudo mkdir /mnt/data
- sudo mount /dev/data_vg/data_lv /mnt/data
复制代码
LVM的一个主要优点是可以轻松调整逻辑卷大小。
- # 扩展逻辑卷(例如增加5GB)
- sudo lvextend -L +5G /dev/data_vg/data_lv
- # 扩展文件系统以使用新增空间
- sudo resize2fs /dev/data_vg/data_lv
复制代码
缩小操作风险较高,建议先备份数据。
- # 缩小文件系统
- sudo resize2fs /dev/data_vg/data_lv 8G
- # 缩小逻辑卷
- sudo lvreduce -L 8G /dev/data_vg/data_lv
复制代码
2. RAID配置
RAID(Redundant Array of Independent Disks)通过组合多个磁盘来提高性能、可靠性或两者兼有。
- sudo apt update
- sudo apt install mdadm
复制代码- sudo mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdc1 /dev/sdd1
复制代码- sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdc1 /dev/sdd1
复制代码- sudo mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdc1 /dev/sdd1 /dev/sde1
复制代码- sudo mkfs.ext4 /dev/md0
- sudo mkdir /mnt/raid
- sudo mount /dev/md0 /mnt/raid
复制代码- sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
- sudo update-initramfs -u
复制代码
编辑/etc/fstab文件,添加:
- /dev/md0 /mnt/raid ext4 defaults 0 2
复制代码
3. 加密分区
使用LUKS(Linux Unified Key Setup)可以创建加密分区,保护敏感数据。
- sudo apt update
- sudo apt install cryptsetup
复制代码- sudo cryptsetup luksFormat /dev/sdc1
复制代码- sudo cryptsetup luksOpen /dev/sdc1 data_crypt
复制代码- sudo mkfs.ext4 /dev/mapper/data_crypt
复制代码- sudo mkdir /mnt/encrypted
- sudo mount /dev/mapper/data_crypt /mnt/encrypted
复制代码- sudo umount /mnt/encrypted
- sudo cryptsetup luksClose data_crypt
复制代码
要在系统启动时自动挂载加密分区,需要配置/etc/crypttab和/etc/fstab。
编辑/etc/crypttab:
- data_crypt /dev/sdc1 none luks
复制代码
编辑/etc/fstab:
- /dev/mapper/data_crypt /mnt/encrypted ext4 defaults 0 2
复制代码
八、故障排除
1. 常见问题及解决方案
解决方案:
- # 查找正在使用分区的进程
- sudo lsof | grep /mnt/data
- # 终止相关进程或等待它们完成
- # 或者使用延迟卸载
- sudo umount -l /mnt/data
复制代码
解决方案:
- # 手动运行文件系统检查
- sudo fsck /dev/sdc1
- # 如果问题严重,可以尝试更彻底的检查
- sudo fsck -y /dev/sdc1
复制代码
解决方案:
1. 在启动菜单中选择恢复模式
2. 选择”root Drop to root shell prompt”
3. 以读写方式重新挂载根分区:mount -o remount,rw /
4. 编辑fstab文件:nano /etc/fstab
5. 修复错误的条目
6. 重启系统:reboot
解决方案:
- # 查找新的UUID
- sudo blkid
- # 更新fstab文件中的UUID
- sudo nano /etc/fstab
复制代码
2. 修复文件系统
- sudo fsck -ccky /dev/sdc1
复制代码- sudo e2fsck -f -v -y /dev/sdc1
复制代码- sudo btrfs check /dev/sdc1
- sudo btrfs check --repair /dev/sdc1 # 危险操作,先备份
复制代码
九、最佳实践和总结
1. 分区方案建议
对于Ubuntu系统,常见的分区方案包括:
• 根分区(/):20-50GB,包含系统文件
• 交换分区(swap):与RAM大小相同或两倍,用于休眠和虚拟内存
• home分区(/home):剩余空间,存储用户数据
• /boot/efi:512MB,EFI系统分区(UEFI系统)
• /boot:1GB,启动文件
• /:20-50GB,系统文件
• /home:50%剩余空间,用户数据
• /var:20%剩余空间,日志和缓存
• /tmp:5%剩余空间,临时文件
• swap:与RAM大小相同或两倍
2. 数据备份策略
• 定期备份重要数据
• 使用不同的备份介质(外部硬盘、云存储等)
• 测试备份恢复过程
• 考虑使用rsync、tar、deja-dup等工具进行备份
3. 性能优化建议
• 将频繁访问的分区放在更快的磁盘上
• 使用适当的文件系统和挂载选项
• 考虑使用SSD缓存或RAID提高性能
• 定期整理文件系统(如适用于ext4的e2defrag)
4. 安全性建议
• 为敏感数据使用加密分区
• 定期更新系统和软件包
• 使用适当的文件权限和挂载选项(如noexec, nosuid, nodev)
• 定期检查文件系统完整性
总结
磁盘分区与挂载是Ubuntu系统管理中的基础技能,掌握这些技能可以帮助你更有效地管理存储空间,优化系统性能,并确保数据的安全性。本指南从基础概念到实际操作,详细介绍了Ubuntu系统中磁盘分区与挂载的各个方面,包括传统分区、LVM、RAID和加密分区等高级主题。
通过遵循本指南中的步骤和建议,你可以自信地管理Ubuntu系统的磁盘空间,应对各种存储需求,并在遇到问题时进行有效的故障排除。无论你是Ubuntu新手还是有经验的系统管理员,希望本指南都能为你提供有价值的信息和指导。 |
|