SDB:Partitioning

跳转到:导航搜索

在 openSUSE 上测试

推荐文章

相关文章


分区方案

Linux 至少需要一个分区,分配给 /,它是根文件系统。但通常会将不同的目录分配到单独的分区,例如 /home。您创建的不同分区通过将它们挂载到您选择的挂载点连接到 / 分区。Linux 中的分区方案取决于您的安装目的。对于标准的通用安装,您可以拥有一个 /、一个 /boot、一个 /home 和一个 swap 分区。但是,针对不同的目的有许多不同的设置,因此以下是一些可以作为单独分区存在的目录

/boot - 挂载在 /boot 上的分区包含操作系统内核以及启动过程中使用的文件。对于大多数用户,500MB 的启动分区就足够了。

swap - 通常应该等于系统上安装的 RAM 大小的两倍(参见第 3 节)。

/home - 将用户的家目录放在单独的分区上很有用。即使 root 分区损坏或被破坏,用户数据也有很大的机会仍然完好无损。相反,即使用户的 /home 目录已满,系统也可以继续运行。

/usr - 包含系统的库和数据的大部分内容。将 /usr 作为单独的分区可以更轻松地更新系统,如果您需要从头开始重新安装系统。

/opt - 如果您安装了第三方产品,您可能希望将 /opt 放在单独的分区中。这将使第三方应用程序在系统升级期间保持不变。

/srv - 如果您将系统用作服务器,请创建一个 /srv 分区,因为它包含 Web 和 FTP 服务器。

/tmp - 将 /tmp 放在单独的文件系统上会将临时文件限制为有限的大小,并避免备份它们。

/var - 由于日志文件保存在 /var 中,因此将其作为单独的磁盘分区是一个好主意。将 /var 留在小 root 分区的一部分,很容易使 root 填满并使机器停止。

注意: 文件系统结构可能因不同的发行版而异,因此您可能需要查阅您选择的发行版的网站,以获取有关特定目录使用的详细信息。在这里,/srv 目录用于 openSUSE 发行版,以提供 Web 内容。其他发行版,如 Debian、Ubuntu、RHEL,使用 /var/www 目录来提供 Web 内容。

分区表

MBR

MBR(主引导记录)位于硬盘的第一个扇区(512 字节)。它由 3 个部分组成
1 - 引导加载程序,位于前 446 字节。
2 - 分区表位于接下来的 64 字节中(每个主分区 16 字节的 4 个条目)。
3 - 最后 2 个字节包含引导记录签名(55 AA)。

MBR 限制为 2TB 驱动器大小。您可以拥有 4 个主分区,或 3 个主分区和一个扩展分区,您可以根据需要进一步对扩展分区进行分区(最多 24 个逻辑分区)。它用于具有 BIOS(基本输入/输出系统)的计算机。

MBR 分区

MBR 下使用的分区工具称为 fdisk

注意: 为了执行此过程,您需要具有管理员权限。

首先,如果您不知道您的驱动器名称,可以像这样列出系统中的所有驱动器

# fdisk -l

如果您知道您的驱动器名称,请使用 fdisk 选择它以编辑其分区

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


Command (m for help):
注意: 这里没有 (sdX) 设备,但此处仅用作约定。SATA 驱动器列为 /dev/sdX,例如 /dev/sda、/dev/sdb 等,驱动器内的分区列为 sda1、sda2 或 sdb1、sdb2 等。IDE 驱动器列为 /dev/hdX,例如 /dev/hda、/dev/hdb 等,IDE 驱动器内的分区列为 hda1、hda2 或 hdb1、hdb2 等。

进入 fdisk 提示符后,建议您首先查看当前分区。以下示例显示了一个 15 GiB USB,其中包含两个分区 /dev/sdb1 和 /dev/sdb2

Command (m for help): p
Disk /dev/sdb: 15 GiB, 16131293184 bytes, 31506432 sectors
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: 0xc8e0e6ee

Device     Boot Start     End Sectors  Size Id Type
/dev/sdb1  *        0 1638399 1638400  800M  0 Empty
/dev/sdb2       13200   37775   24576   12M ef EFI (FAT-12/16/32)

如果要删除分区,请键入 d。如果要添加新分区,而不触碰现有分区,请键入 n。按下 n 后,您可以选择您想要的分区类型,主分区 (p) 或扩展分区 (e)。然后输入分区号(按 Enter 接受默认值)。接下来,您可以选择分区的第一个扇区(安全地接受默认值,因为 fdisk 会选择磁盘中最后一个分区之后的下一个扇区)。然后,对于最后一个扇区,如果希望分区占用磁盘上所有剩余空间,请接受默认值,或者指定以扇区或 KiB、MiB、GiB 等为单位的空间量。在所示示例中,创建了一个主分区并分配了 5GiB 的空间。

Command (m for help): n
Partition type
   p   primary (2 primary, 0 extended, 2 free)
   e   extended (container for logical partitions)
Select (default p): p

Using default response p.
Partition number (3,4, default 3): 
First sector (1638400-31506431, default 1638400): 
Last sector, +sectors or +size{K,M,G,T,P} (1638400-31506431, default 31506431): +5G

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

现在,如果要更改分区类型,可以键入 t。然后指定要更改的分区号。之后,指定分区类型。在本例中,第 3 个分区更改为 Windows FAT32。

Command (m for help): t
Partition number (1-3, default 3): 
Partition type (type L to list all types): L

Partition type (type L to list all types): b

Changed type of partition 'Linux' to 'W95 FAT32'.

在此示例中,剩余空间分配给扩展分区。该过程与主分区类似。创建后,您可以继续添加更多逻辑分区。

Command (m for help): n
Partition type
   p   primary (3 primary, 0 extended, 1 free)
   e   extended (container for logical partitions)
Select (default e): 

Using default response e.
Selected partition 4
First sector (12124160-31506431, default 12124160): 
Last sector, +sectors or +size{K,M,G,T,P} (12124160-31506431, default 31506431): 

Created a new partition 4 of type 'Extended' and of size 9.2 GiB.

Command (m for help): n
All primary partitions are in use.
Adding logical partition 5
First sector (12126208-31506431, default 12126208): 
Last sector, +sectors or +size{K,M,G,T,P} (12126208-31506431, default 31506431): +3.2G

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

现在,USB 的分区表如下所示

Device     Boot    Start      End  Sectors  Size Id Type
/dev/sdb1  *           0  1638399  1638400  800M  0 Empty
/dev/sdb2          13200    37775    24576   12M ef EFI (FAT-12/16/32)
/dev/sdb3        1638400 12124159 10485760    5G  b W95 FAT32
/dev/sdb4       12124160 31506431 19382272  9.2G  5 Extended
/dev/sdb5       12126208 18827263  6701056  3.2G 83 Linux

完成分区创建后,您必须将分区表写入磁盘,方法是键入 w

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

如果您看到如下消息:WARNING: Re-reading the partition table failed with error 16: Device or resource busy,最可能的原因是磁盘上的某个分区仍然挂载。卸载分区(在本例中为 /dev/sdb),然后尝试运行以下命令将磁盘分区表与内核同步

# umount /dev/sdb
# partprobe /dev/sdb
Icon-warning.png
警告: 如果在使用 fdisk 分区磁盘时出错,只需键入 (q) 即可退出而不保存更改。如果您在操作过程中遇到问题,例如添加分区,只需完成该操作,然后在看到命令提示符后键入 (q) (Command (m for help): q)。

现在分区已创建并将分区表写入磁盘,最后一步是在这些分区上写入文件系统。为此,使用 mkfs 命令以及文件系统名称(如果您未指定文件系统,mkfs 默认创建 ext2 文件系统)。在此示例中,将格式化两个分区(在本例中为 /dev/sdb3 和 /dev/sdb5),一个为 FAT32 分区,另一个为 ext4 分区。

# mkfs -t vfat /dev/sdb3
# mkfs -t ext4 /dev/sdb5
注意: 主分区是用于启动操作系统的分区。扩展分区是包含逻辑分区的分区。逻辑分区是超出 MBR(4 个)/GPT(128 个)主分区,使用扩展分区中的空间的任何分区。

GPT (GUID)

GPT(GUID)分区表存储在磁盘上的多个位置。它被称为 GUID 分区表,因为驱动器上的每个分区都有一个全局唯一标识符或 GUID。基于 GPT 的驱动器可以更大,其大小限制取决于操作系统及其文件系统。您可以拥有多达 128 个主分区,然后是扩展分区。在 GPT 分区中,备份分区表存储在磁盘末尾。GPT 用于具有 UEFI(统一可扩展固件接口)的计算机。在具有 BIOS 的计算机上,GPT 就像 MBR 一样(BIOS 将 GPT 视为具有单个 MBR 分区的驱动器)。

GPT 分区

MBR 下使用的分区工具称为 gdisk

注意: 为了执行此过程,您需要具有管理员权限。

在此示例中,再次使用 15GiB USB。当前,USB 包含 MBR 分区表并具有单个分区。分区过程与 fdisk 类似。首先,建议您首先通过键入 gdisk -l 列出驱动器,以检查您的驱动器名称。

注意: 如果您尝试在具有 MBR 表的系统上列出驱动器,可能会遇到错误。

GPT fdisk (gdisk) version 0.8.8

Problem opening -l for reading! Error is 2.
The specified file does not exist!

要解决此问题,只需使用 fdisk 列出您的驱动器即可。

然后,使用 gdisk 选择驱动器。

注意: 在这种情况下,USB 具有 MBR 分区表,因此 gdisk 会发出警告!首先,gdisk 扫描分区表。以下扫描显示存在 MBR 表。
Icon-warning.png
警告: 如果您在命令提示符中键入 w(写入),它只会将 MBR 表转换为 GPT。此操作具有破坏性并会导致数据丢失,因此首先,您可能需要备份任何重要数据。
# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.8

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present


***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!
***************************************************************


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
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.

现在,让我们再次选择 USB,以创建一些分区!在本例中,USB 将具有单个分区。要查看选项列表,请键入 ?,要创建新分区,请键入 n。安全地接受默认的第一个扇区。对于最后一个扇区,您可以指定以 KiB、MiB、GiB 等为单位的空间量(例如 +2G 表示 2GiB)。之后,键入 L 以列出文件系统类型及其代码。在本例中,选择的代码为 0700,即 exFAT 文件系统。之后键入 w 以写入分区表(如果您想先检查分区表,请键入 p)。

# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.8

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
Partition number (1-128, default 1): 
First sector (34-31506398, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-31506398, default = 31506398) or {+-}size{KMGTP}: 
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 0700                                                                                                                         
Changed type of partition to 'Microsoft basic data'                                                                                                                            

Command (? for help): p
Disk /dev/sdb: 31506432 sectors, 15.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 1D24896C-7AA3-4713-80E0-7DAEA507DD0F
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 31506398
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        31506398   15.0 GiB    0700  Microsoft basic data

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
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.

现在,分区完成并将分区表写入磁盘,最后一步是在分区上写入文件系统。为此,使用 mkfs 命令以及文件系统类型和分区名称(在本例中为 /dev/sdb1)。

# mkfs.exfat /dev/sdb1
mkexfatfs 1.2.4
Creating... done.
Flushing... done.
File system created successfully.

到目前为止,USB 上的 MBR 表已转换为 GPT。之后,USB 使用单个分区和 exFAT 文件系统进行分区。现在,让我们看看如何使用 gdisk 从 GPT 转换回 MBR。为此,首先使用 gdisk 选择驱动器。然后键入 x 以获取专家功能,然后键入 z 以销毁 GPT 数据结构。当提示是否清除 MBR 时,键入 Y 以擦除它并重新开始,或键入 N 以保留它。在后一种情况下,驱动器将最终具有单个 EFI 分区。之后,您可以启动 fdisk 并更改分区的类型。

# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.8

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): x

Expert command (? for help): z
About to wipe out GPT on /dev/sdb. Proceed? (Y/N): Y
GPT data structures destroyed! You may now partition the disk using fdisk or
other utilities.
Blank out MBR? (Y/N): N
MBR is unchanged. You may need to delete an EFI GPT (0xEE) partition
with fdisk or another tool.

现在您可以使用 fdisk 更改驱动器中的分区。

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


Command (m for help): p
Disk /dev/sdb: 15 GiB, 16131293184 bytes, 31506432 sectors
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: 0x00000000

Device     Boot Start      End  Sectors Size Id Type
/dev/sdb1           1 31506431 31506431  15G ee GPT

Command (m for help):

swap 分区类型

交换空间是硬盘交换分区或交换文件,您的计算机可以在其中“交换” (系统需要的内存超过物理可用内存) 暂时未使用的 RAM 中的数据,然后在需要时将数据“交换” (程序需要加载到 RAM 中的交换区域中的文件) 回到 RAM。通常,交换空间应等于系统上安装的 RAM 大小的两倍。有时会发生过多的交换或“抖动”,数据被交换出去然后很快又被交换回来等等。在这种情况下,系统难以找到可用内存并同时运行应用程序。在这种情况下,仅添加更多 RAM 才能帮助。虽然从不超出 RAM 更好(性能会受到交换的影响),但交换比让进程直接失败要好。

创建 swap 文件

要从文件创建交换区域,首先需要创建空文件,其大小等于您想要的交换空间大小。

在此示例中,将在 root 文件系统中创建一个名为 swapfile 的 1GB 文件,使用 dd 命令。

首先,您指定输入文件 if=/dev/zero/dev/zero 是类 Unix 操作系统中的一个特殊文件,它会根据读取它的内容提供尽可能多的空字符(ASCII NUL,0x00)。它用于创建仅填充零的文件或内存页),然后使用 of=/path/to/where_you_want/to_store_swap 指定输出文件。bs=1M 表示您将一次读取和写入最多 1M(兆字节),而 count=1024 将重复写入 1024 次。

# dd if=/dev/zero of=/swapfile bs=1M count=1024

创建后,您需要使用 mkswap 命令将文件转换为交换文件

# mkswap /swapfile

设置正确的权限

# chmod 600 /swapfile

然后,要使计算机可以使用交换空间,请使用 swapon 命令

# swapon /swapfile

编辑 /etc/fstab 配置文件,添加交换文件的条目

# /swapfile none swap defaults 0 0

如果您想禁用交换空间,可以使用 swapoff 命令

# swapoff /swapfile

创建 btrfs 交换文件

btrfs 系统上创建 swapfile 与上述步骤差别不大,但如果操作不当,可能会给 snapper 带来一些意想不到的问题。以下步骤将帮助您正确创建 swapfile

首先创建一个 子卷

# sudo btrfs subvolume create /var/lib/swap

设置正确的权限,以便只有 root 用户可以访问它

# sudo chmod 700 /var/lib/swap

在新建的 子卷 中创建一个空文件

# sudo truncate -s 0 /var/lib/swap/swapfile

为了避免问题,您必须禁用 CoW (Copy on Write),并且,虽然 openSUSE 默认情况下不启用压缩,但如果您启用了,也必须禁用它

# sudo chattr +C /var/lib/swap/swapfile
# sudo btrfs property set /var/lib/swap/swapfile compression none

使用您希望为 swap 设置的容量分配文件。通常是系统安装的 RAM 的一半或相同数量。在本例中,我们设置为 8GB,请根据您的需求调整值

# sudo fallocate -l 8G /var/lib/swap/swapfile

进一步调整 root 用户对 swapfile 的访问权限

# sudo chmod 600 /var/lib/swap/swapfile

将文件转换为 swapfile

# sudo mkswap /var/lib/swap/swapfile

启用 swapfile

# sudo swapon /var/lib/swap/swapfile

检查 swapfile 是否已启用

# sudo free -h

将您创建的 swapfile 添加到 fstab,以便在启动时启用它

# echo "/var/lib/swap/swapfile none swap defaults 0 0" | sudo tee -a /etc/fstab

创建 swap 分区

交换分区通常在系统安装期间创建。但是,如果您在安装期间没有创建用于交换的单独分区,则可以在之后创建它。根据您的系统,按照创建分区(第 2.1.1 和 2.2.1 点)的步骤操作,不要忘记将其设置为 Linux Swap 分区类型。创建后,您可以使用 mkswap 命令对其进行格式化,然后使用 swaponswapoff 命令分别启用或禁用它。

# mkswap /dev/sdX
# swapon /dev/sdX
# swapoff /dev/sdX

删除 swap 分区

从系统使用中删除现有的交换分区需要在 3 个地方删除分区

1) 禁用交换空间

# swapoff /dev/sdX

2) 从 /etc/fstab 中删除或注释掉条目。该文件包含操作系统在启动时挂载的卷和磁盘。

# vim etc/fstab

在本例中,fstab 文件包含两个交换文件,由它们的 UUID 标识。第一个以“3ae”开头的标识符被挂载,而第二个 UUID 以 9058 开头的文件已经被注释掉,这意味着操作系统忽略该记录。第三个是挂载为“root”并格式化为 butterFS 文件系统的分区。

UUID=3ae5826b-b3ef-4d7c-8ab2-8af2133c210c  swap                    swap   defaults                       0  0
#UUID=9058a8e5-6703-40e4-8e57-ef880051540d  swap                    swap   defaults                       0  0
UUID=f81c655a-894e-471f-b0a7-6f0cefb02510  /                       btrfs  defaults                       0  0

如果您以前没有使用过 VIM,请按 i 进入“编辑”模式,然后按 ESC 键返回命令模式。要保存文件,请进入命令模式 (ESC) 并键入“:wq”,表示“command” “write” 和 “quit”

3) 重建初始 ramdisk。THis w

# dracut -f


4) 可能是 GRUB 仍然指向交换分区以恢复系统。将此未更改会使 systemd 在查找分区或文件上花费大量时间,从而大大延长启动时间。通过打开 GRUB CMD_Line 文件删除 resume 部分,在 vim 中打开文件

vim /etc/default/grub

然后查找 GRUB_CMDLINE_LINUX_DEFAULT 行,如果您看到 resume 参数,请删除它,以便

GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/sdX splash=silent quiet showopts"

更改为这样

GRUB_CMDLINE_LINUX_DEFAULT="splash=silent quiet showopts"

使用“:wq”保存

5) 现在您需要将管理到 GRUB 命令行的更改应用于 GRUB,方法是输入以下行

# grub2-mkconfig -o /boot/grub2/grub.cfg

6) 您可以重新启动系统。


参见