linux 的硬盘管理

2k 词

文章封面: Hello world by: アシマ / Ashima

本人为新手,如有错误或不足之处,欢迎指正。


分区表的概念

使用哪种分区表决定了你可以创建多少分区和大小。

MBR 主引导记录(Master Boot Record)
MBR 的优点是兼容性好,可以用于 BIOSUEFI 启动模式,也可以和多种操作系统共存。

  • 结构:MBR 是一个 512 字节的扇区,其中包含引导代码和分区表。
  • 分区限制:MBR 支持最多 4 个主分区或 3 个主分区和一个扩展分区,每个主分区可以包含一个操作系统。
  • 容量限制:MBR 最大支持 2TB 的硬盘。

GPT 全局唯一标识分区表(GUID Partition Table)
GPT 的优点是更先进,更安全,更灵活,可以用于 UEFI 启动模式,也可以和多种操作系统共存,但不支持 BIOS 启动模式。

  • 结构:GPT 使用 GUID(全局唯一标识符)标识分区表项,整个分区表存储在硬盘的开头和结尾,以提高可靠性。
  • 分区限制:GPT 支持最多 128 个分区。每个分区都有唯一的 GUID 标识符,而不再受限于主分区和扩展分区的概念。
  • 容量限制:GPT 支持的硬盘大小取决于扇区大小,理论大小是 8 ZB(Zettabyte),远远超过 MBR 的 2TB 限制。

查看硬盘

  1. 查看已挂载的硬盘

    1
    df -hT # 查看已挂载的硬盘和文件系统
  2. 查看全部的硬盘

    1
    2
    lsblk -f # 直观和方便查看 UUID
    fdisk -l # 详细

    参数说明:

    • f:显示文件系统信息。
    • l:显示全部分区。

创建分区

MBR 分区

主分区、扩展分区和逻辑分区的概念,GPT 分区没有这种概念。

主分区:

  • 一块硬盘最多可以有 4 个主分区。
  • 它们是硬盘上直接的物理分区,可以安装操作系统或创建文件系统。

扩展分区:

  • 只能有一个扩展分区。
  • 它充当容器,用于创建更多的逻辑分区,它不可以存储数据,只用于记录逻辑分区。

逻辑分区:

  • 在扩展分区内创建的分区。可以创建多个逻辑分区,没有数量限制,和主分区一样。
  • 所以要超出第 4 个分区,就至少要创建一个扩展分区,然后利用扩展分区,来创建逻辑分区。

  1. 使用fdisk创建 MBR 分区表

    注意fdisk只针对 MBR 分区表。

    1
    fdisk /dev/[硬盘]    # 对硬盘分区

    以下是实例,其实使用翻译器就会了一半了。

    实例
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    root@debian:~
    > fdisk /dev/sdf # 对硬盘分区

    Welcome to fdisk (util-linux 2.38.1).
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.

    Device does not contain a recognized partition table.
    Created a new DOS (MBR) disklabel with disk identifier 0x19e900f7.

    Command (m for help): n # 输入 "n" 新建分区。
    Partition type
    p primary (0 primary, 0 extended, 4 free) # p 是主分区。
    e extended (container for logical partitions) # e 是扩展分区。
    Select (default p): p # 输入 "p" 创建主分区(默认主分区)。
    Partition number (1-4, default 1): 1 # 默认回车,这里的意思是"问你要创建分区几?"。
    First sector (2048-10485759, default 2048): 2048 # 默认回车,意思是"从第几扇区开始?",这个不用特意的计算。
    Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-10485759, default 10485759): +1G # 输入你要设置的分区大小,比如"+1G"就是设置该分区大小1G,空间不能大于硬盘的空间。

    Created a new partition 1 of type 'Linux' and of size 1 GiB.

    Command (m for help): p # 输入 "p" 查看创建的分区,注意查看命令行不要输错了。
    Disk /dev/sdf: 5 GiB, 5368709120 bytes, 10485760 sectors
    Disk model: VMware Virtual S
    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: dos
    Disk identifier: 0x19e900f7

    Device Boot Start End Sectors Size Id Type
    /dev/sdf1 2048 2099199 2097152 1G 83 Linux # 分区一为1G。

    Command (m for help): w # 输入 "w" 保存刚才创建的分区。
    The partition table has been altered.
    Calling ioctl() to re-read partition table.
    Syncing disks.

  2. 重新读取分区

    1
    partprobe # 命令重载一下,不然可能会报错

GPT 分区

  1. 使用 gdisk 创建 GPT 分区表

    1
    gdisk /dev/[硬盘]    # 对硬盘进行分区

    以下是实例,基本和fdisk一样。

    实例
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    root@debian:~
    > gdisk /dev/sdf # 对硬盘进行分区
    GPT fdisk (gdisk) version 1.0.9

    Partition table scan:

    MBR: protective
    BSD: not present
    APM: not present
    GPT: present

    Found valid GPT with protective MBR; using GPT.

    Command (? for help): n # 输入 "n" 新建分区。
    Partition number (2-128, default 2): 2 # 默认回车。
    First sector (34-10485726, default = 2099200) or {+-}size{KMGTP}: # 默认回车,意思是从第几个扇区开始。
    Last sector (2099200-10485726, default = 10483711) or {+-}size{KMGTP}: +1G # 输入你要设置的分区大小,这里和 fdisk 哪里一样。
    Current type is 8300 (Linux filesystem)
    Hex code or GUID (L to show codes, Enter = 8300): # 默认回车,使用 Linux 文件系统,如果要设置别就输入 "L" 显示其它代码。
    Changed type of partition to 'Linux filesystem'

    Command (? for help): w # 保存操作。

    Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
    PARTITIONS!!

    Do you want to proceed? (Y/N): y # yes
    OK; writing new GUID partition table (GPT) to /dev/sdh.
    The operation has completed successfully.
  2. 重新读取分区

    1
    partprobe # 命令重载一下,不然可能会报错

格式化/创建文件系统

  1. 查看分区

使用lsblk看一下,需要格式化的分区。

1
2
3
4
5
6
7
8
9
root@debian:~
> lsblk # 查看硬盘和分区
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 30G 0 disk
├─sda1 8:1 0 29G 0 part /
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 975M 0 part [SWAP]
sdf 8:80 0 5G 0 disk
└─sdf1 8:81 0 1G 0 part

上面的 sdf 表示是一块硬盘 而 sdf1 是它的第一个分区。

  1. 格式化

    使用的文件系统是 ext4

    1
    mkfs.ext4 /dev/[分区] # 对分区格式化
    实例
    1
    mkfs.ext4 /dev/sdf1

挂载分区

  1. 创建文件夹

    /mnt 目录下创建一个文件夹,以便将分区挂载到该文件夹上。

    1
    mkdir /mnt/[任意文件夹]
  2. 挂载分区

    • 手动挂载

      1
      mount /dev/[硬盘分区] /mnt/[任意文件夹]
    • 自动挂载

      使用 lsblk -fblkid 查看硬盘的UUID,使用UUID来进行挂载。

      把下面 [分区UUID] 替换成 你分区的 UUID ,和 挂载点路径 的替换。
      关于 [文件系统类型] 就填你格式化使用的文件系统。

      1
      echo "UUID=[分区UUID] [挂载点路径] [文件系统类型] defaults 0 0" >> /etc/fstab
      实例
      1
      echo "UUID=8e040289-345b-4afa-b8a7-a0e4604e12d4 /mnt/test ext4 defaults 0 0" >> /etc/fstab
  3. 重新加载

重新加载 Systemd 和执行 mount -a 让挂载生效。

1
2
systemctl daemon-reload
mount -a

之后使用 df -h 查看有没有挂载成功。

硬盘分区的删除

  1. 查看分区表类型

    使用 parted 命令查看分区表类型。

    1
    parted /dev/[硬盘] print
    实例
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    root@debian:~
    > parted /dev/sdb print
    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sdb: 5369MB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    Disk Flags:

    Number Start End Size Type File system Flags
    1 1049kB 1075MB 1074MB primary ext4
    2 1075MB 2149MB 1074MB primary ext4
    3 2149MB 3222MB 1074MB primary ext4
    4 3222MB 4296MB 1074MB primary ext4

    如果输出的是 Partition Table: msdos,就是 MBR 分区表,或者 Partition Table: gpt,就是 GPT 分区表。

  2. 删除对应分区

    MBR 分区就使用 fdisk 删除分区,GPT 分区就使用 gdisk 删除分区。

    注意:删除分区前先查看你要删除的分区。
    PS:如果硬盘里只有一个分区它默认选中它,不会问你是否要删除那个分区。

    • MBR 分区

      进入后输入 "p" 命令列出分区表,确认要删除的分区

      1
      fdisk /dev/[硬盘]

      使用 "d" 然后输入你要删除的分区号就行了,再输入 "w" 保存并退出了。

    • GPT 分区
      进入后输入 "p" 命令列出分区表,确认要删除的分区

      1
      gdisk /dev/[硬盘]

      使用 "d" 然后输入你要删除的分区号就行了,再输入 "w" 保存,之后输入 "y" 同意当前更改。

  3. 重新读取分区

    1
    partprobe # 命令重载一下
留言