12.Linux 磁盘管理

Linux : 磁盘管理

一、磁盘设备命名规则
磁盘类型设备命名模式示例特点
SATA/SCSI/SAS/dev/sdXsda(第一块硬盘) sda1(第一块硬盘第一分区)机械硬盘/通用接口
NVMe/dev/nvmeXnYpZnvme0n1(第一通道第一块盘) nvme0n1p1(第一通道第一块盘第一分区)SSD高性能接口
Virtio-block/dev/vdXvda(第一块虚拟盘)虚拟化环境专用

查看磁盘信息

fdisk -l       # 查看分区详情
lsblk          # 树形显示块设备
parted -l      # 查看分区表详情
二、分区方案对比:MBR vs GPT
特性MBR (msdos)GPT (gpt)
最大磁盘容量2TB8ZB(理论极限)
分区数量4个主分区(或3主+1扩展+多个逻辑)128个主分区
引导记录单份(位于磁盘开头,易损坏)双份(首尾备份,更安全)
分区表大小64字节(固定)16,384字节(更灵活)
适用系统旧版BIOSUEFI固件

关键区别

  • MBR磁盘标签:msdos
  • GPT磁盘标签:gpt
  • 转换分区表会清除所有数据

fdisk与parted对比

在Linux系统中,fdiskparted都是常用的磁盘分区工具,但它们在功能和使用场景上有显著区别:

特性fdiskparted
分区表支持仅支持MBR(msdos)分区表支持MBR和GPT分区表
磁盘容量限制最大2TB磁盘支持>2TB的大容量磁盘(理论8ZB)
交互模式命令行交互界面(类似vi)支持交互模式和单行命令模式
分区数量最多4个主分区(或3主+1扩展+逻辑分区)GPT支持最多128个主分区
操作方式操作后需执行w命令才生效命令实时生效(无撤销功能)
文件系统支持只创建分区,需单独格式化可同时指定文件系统类型(仅标记)
单位系统默认柱面(cylinder)支持灵活单位(MB/GB/TB/%等)
调整分区大小不支持支持resizepart调整分区大小
主要发行版所有Linux发行版预装大多数发行版预装
典型应用场景传统MBR分区的小容量磁盘大容量磁盘/GPT分区/UEFI系统
fdisk -l 输出字段详解
术语含义示例值
Disk磁盘设备路径/dev/sda
GiB/bytes磁盘总容量(二进制GB/字节)20 GiB, 21474836480 bytes
sectors总扇区数量41943040
Units扇区计算单位(1扇区=512字节)sectors of 1 * 512
Sector size逻辑/物理扇区大小(高级格式磁盘可能不同)512B/512B
Disklabel type分区表类型(dos=MBR, gpt=GPT)dos
Disk identifierMBR磁盘随机标识码0xac318c9a
Device分区设备路径/dev/sda1
Boot引导标志(*表示可引导分区)*
Start/End分区起始/结束扇区号2048, 2099199
Sectors分区占用的扇区总数2097152
Size分区容量(自动换算)1G
Id分区类型十六进制代码83
Type分区类型描述(基于Id)Linux

常见分区类型ID

  • 82: Linux swap

  • 83: Linux filesystem

  • 8e: Linux LVM

  • ef: EFI系统分区

  • 基础语法
    fdisk [选项] <磁盘设备>
    
    选项说明
    -l列出分区表(不进入交互模式)
    -s <分区>显示分区大小(块数)
    -u显示扇区数而非柱面数
    -b <大小>指定扇区大小(512/1024/2048/4096)
    -c关闭 DOS 兼容模式
    -C <柱面>指定柱面数(旧磁盘兼容)

    交互模式核心命令

    进入交互模式:sudo fdisk /dev/sdb

    命令功能使用示例
    p打印分区表p
    n创建新分区n → p → 1 → [起始] → +10G
    d删除分区d → 2(删除分区2)
    t更改分区类型t → 3 → 82(设为swap)
    a切换引导标志a → 1(设sdb1为可引导)
    m显示帮助菜单m
    w保存并退出w(立即生效)
    q不保存退出q
    v验证分区表v
    L列出所有分区类型L(查看ID代码)

Parted 命令全面详解


基础语法
parted [选项] [设备] [命令 [参数]]
选项说明
-l列出所有磁盘分区表
-s脚本模式(无交互)
-a对齐类型(min/opt,用于SSD优化)
-f强制执行(跳过警告)

常用操作命令
命令语法功能示例
mklabelmklabel 标签类型创建分区表mklabel gpt
mkpartmkpart [类型] [文件系统] 起点 终点创建分区mkpart primary ext4 1MiB 10GiB
rmrm 分区号删除分区rm 2
resizepartresizepart 分区号 新终点调整分区大小resizepart 3 50GiB
printprint [free/all]显示分区信息print free
setset 分区号 标志 状态设置分区标志set 1 esp on
unitunit 单位设置显示单位unit GB
selectselect 设备切换磁盘select /dev/sdb

关键功能详解

1. 创建分区表

# 创建GPT分区表
parted /dev/sdb mklabel gpt

# 创建MBR分区表(传统BIOS)
parted /dev/sdc mklabel msdos

2. 创建分区

# 创建主分区(文件系统仅作标记,需单独格式化)
parted /dev/sdb mkpart primary xfs 1MiB

# 创建逻辑分区(需先建扩展分区)
parted /dev/sdc mkpart extended 1024MiB
parted /dev/sdc mkpart logical ext4 1025MiB 2048MiB

3. 设置分区标志

# 设置启动标志(MBR)
parted /dev/sdb set 1 boot on

4. 调整分区大小

# 先卸载分区
umount /dev/sdb1

# 调整分区终点(需文件系统支持)
parted /dev/sdb resizepart 1 30GiB

# 调整文件系统(XFS示例)
xfs_growfs /mount/point

5. 查看分区信息

parted /dev/sda print
# 输出示例:
Model: ATA ST2000DM008-2FR1 (scsi)
Disk /dev/sda: 2000GB
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  538MB   537MB   fat32        EFI   boot, esp
 2      538MB   50.0GB  49.5GB  xfs          root
 3      50.0GB  2000GB  1950GB               data  lvm

单位系统说明

parted 支持智能单位换算:

unit GB       # 以GB为单位(1GB=1000^3字节)
unit MiB      # 以MiB为单位(1MiB=1024^2字节)
unit %        # 按百分比分配空间
unit s        # 扇区模式(默认512字节/扇区)

# 示例:使用百分比创建分区
parted /dev/sdb mkpart primary 0% 50%

交互模式 与 非交互模式

1. 交互模式(推荐初学者)

parted /dev/sdb
(parted) mklabel gpt
(parted) mkpart primary 1MiB 10GiB
(parted) set 1 esp on
(parted) print
(parted) quit

2. 非交互模式(适合脚本)

# 单行命令完成分区
parted -s /dev/nvme0n1 mklabel gpt \
       mkpart "EFI" fat32 1MiB 512MiB \
       set 1 esp on \
       mkpart "root" xfs 513MiB 100%

注意事项与故障处理
  1. 数据安全警告

    • parted 操作实时生效,无撤销功能
    • 操作前务必备份:dd if=/dev/sda of=sda_backup.img bs=1M
  2. 常见错误处理

    # 错误: 分区未刷新
    Error: Partition(s) on /dev/sdb are being used.
    # 解决: 卸载分区或重启系统
    
    # 错误: 无效起点
    Error: The location 0MiB is outside the device
    # 解决: 使用1MiB代替0MiB(保留引导间隙)
    
  3. 分区后必要操作

    # 刷新内核分区表
    partprobe /dev/sdb
    
    # 等待设备文件生成
    udevadm settle
    
    # 格式化新分区
    mkfs.xfs /dev/sdb1
    
  4. 与文件系统的关系

    • parted 只管理分区边界
    • 格式化必须单独进行:mkfs, mkswap
    • 调整分区大小后需调整文件系统
普通分区挂载流程
# 1. 等待设备初始化完成
udevadm settle

# 2. 格式化分区为XFS文件系统
mkfs.xfs /dev/sdc1

# 3. 查询分区UUID
blkid /dev/sdc1

# 4. 创建挂载点
mkdir /test

# 5. 配置永久挂载(编辑fstab文件)
vim /etc/fstab
# 添加以下内容:
UUID=uuid /test xfs defaults 0 0

# 6. 挂载所有fstab配置的分区
mount -a

# 7. 验证挂载
df -hT /test

二、交换分区配置流程
# 1. 创建交换分区(501MB)
统一单位unit MiB
(parted) mkpart 
Partition name?  []?                                                      
File system type?  [ext2]?                                                
Start? 10MiB
End? 510MiB
(parted) quit
udevadm settle
# 2. 格式化交换分区
mkswap /dev/sdb1
#Setting up swapspace version 1, size = 511996 KiB
#no label, UUID=ec6781fa-8dd3-4aa6-b6ad-8b52d5ea93bf
# 3. 查询交换分区UUID
blkid /dev/sdc1

# 4. 配置永久交换(编辑fstab文件)
vim /etc/fstab
# 添加以下内容:
UUID=uuid swap swap defaults 0 0

# 5. 刷新交换空间配置
swapoff -a  # 关闭所有交换分区
swapon -a   # 按fstab启用交换分区

# 6. 验证交换空间
free -m
swapon --show
命令作用注意事项
udevadm settle等待系统创建设备文件必须执行,否则可能找不到设备
mkfs.xfs创建XFS文件系统替代方案:mkfs.ext4
blkid查看设备UUID推荐使用UUID 避免设备名变化
mount -a挂载/etc/fstab所有配置测试配置是否正确
parted mkpart创建分区linux-swap指定为交换分区
mkswap初始化交换空间必须步骤,否则无法使用
swapoff -a停用所有交换分区刷新前必要操作
swapon -a启用/etc/fstab中的交换分区使新配置生效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值