SDB:分区

跳转至: 导航, 搜索


测试版本

推荐条目

相关条目


分区方案

Linux 至少需要一个分区,也就是分配给 / 的根文件系统。但是,为特定的目录建立单独的分区是很常见的,例如 /home。你所创建的不同的分区都会通过你选定的挂载点,挂载至 / 分区之下。对于一个标准的、通用的安装,你会拥有一个 //bootSWAP 分区。然而,不同的目的有不同的安装方法,所以,下面列举了一些可以被分为一个单独分区的目录:

/boot - 挂载在 /boot 的分区包含了操作系统内核,在引导过程中相关的文件。对于大多数的用户,一个单独的 500 MB 大小的分区是足够。

swap - 通常应该是你硬件系统装载的内存的两倍(见第3节)。

/home - 将用户的家目录放置在一个单独的分区是很有用的。即便 / 分区出现故障或损毁,用户数据也有很大机会保持完整。反过来说,即便用户的 /home 出现空间不足的情况,系统仍然可以正常运转。

/usr - 包含了系统的大部分库和数据。创建一个单独的 /usr 分区,如果你需要从头开始重新安装系统,可以使更新系统变得更容易。

/opt - 如果你安装了第三方产品,你可能需要一个单独的 /opt 分区,这会在系统升级的过程中保留已安装的第三方程序。

/srv - 如果你将你的系统作为一个服务器,创建一个单独的 /srv 分区,因为它包含了网络和 FTP 服务器。

/tmp - 把 /tmp 放在一个单独的文件系统中,将临时文件限制在一个有限的大小,并省去了备份它们的麻烦。

/var - 因为日志文件保存在 /var ,将其划分为一个单独的分区是一个不错的主意。如果把 /var 作为一个容量小的根分区的一部分,使得 / 很容易被填满,并使机器停转。

注意: 文件系统结构可能因为发行版的不同而不同,所以你可能需要前往你选择的发行版的网站,查询有关特定目录的使用信息。例如,openSUSE 使用 /srv 作为提供网络内容的目录,而在其他发行版,例如 Debian 、Ubuntu 或 RHEL ,则使用 /var/www 作为提供网络内容的目录。

分区表

MBR

MBR (Master Boot Record,主引导记录)位于硬盘的第一个扇区(512 字节) ,它包含三部分:

  1. - 引导程序,它驻留在前 446 个字节中。
  2. - 分区表驻留在接下来的 64 个字节中(4 个条目,每个 16 字节,每个主分区一个条目)。
  3. - 最后两个字节包含引导记录的签名(55AA)。

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 的设备,此处使用 sdX 只是为了举例方便而已。SATA 的驱动器是以 /dev/sdX 的形式列举的,例如 /dev/sda 、/dev/sdb 等,驱动器内的分区是以 sda1 、sda2 或 sdb1 之类的形式标注的。IDE 驱动器是以 /dev/hdX 的形式列举,如 /dev/hda 、/dev/hdb ,驱动器内的分区也和 SATA 驱动器一致,如 /dev/hda1 、/dev/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 (警告:重新读取分区表失败,错误16:设备或资源繁忙) ,最有可能的原因是该磁盘的某个分区仍然处于挂载状态。卸载该分区(该样例中为 /dev/sdb),然后运行下列命令同步磁盘分区表至系统内核:

# umount /dev/sdb
# partprobe /dev/sdb
注意: 如果你使用 fdisk 进行了错误的分区,只需键入 q 退出(不保存变更)即可。如果你停滞在某一操作过程中,例如添加一个新的分区,只需等待操作完成,然后看到提示(Command (m for help): q)后键入 q 即可。

现在,分区已经创建,分区表也已写入磁盘,最后一步就是为新建分区写入文件系统。例如这个任务中,使用 mkfs 命令和文件系统的名称(如果你不指定文件系统的名称,那么 mkfs 会自动创建一个 ext2 文件系统)。在这个例子中,两个分区(也就是样例中的 /dev/sdb3 和 /dev/sdb5 )会被格式化成一个 FAT32 分区和一个 ext4 分区。

# mkfs -t vfat /dev/sdb3
# mkfs -t ext4 /dev/sdb5
注意: 主分区是一个用于启动操作系统的分区。一个扩展分区是一个持有逻辑分区的分区。逻辑分区是指 4(MBR)/128(GPT) 主分区以外的任何分区,它使用扩展分区的空间。

GPT (GUID)

GPT(GUID)分区表存储在磁盘的多个位置上。因为你的磁盘上的每个分区都有一个 “全局唯一标识符(globally unique identifier)” ,即 GUID ,所以它被称之为 GUID 分区表。基于 GPT 的驱动器可以有更大的容量,大小限制取决于操作系统和文件系统。你可以拥有超过128个主分区和比主分区更大的扩展分区。在 GPT 分区过程中,备份分区表存储在磁盘的末尾。GPT 用于有 UEFI(统一可扩展固件接口)的计算机上。在具备 BIOS 的计算机上, GPT 的作用类似于 MBR(BIOS 将 GPT 识别为一个带有单一 MBR 分区的驱动器)。

在 GPT 下分区

在 MBR 下使用的分区工具,叫 gdisk

注意: 为了执行下列过程,你需要获得管理员权限

在这个例子中,将再次使用上个例子中的 15 GB 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 分区表。
注意: 如果你在命令提示中输入了 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 。现在,来看看如何将 GPT 分区表转换回 MBR 分区表。要这么做,首先用 gdisk 选中驱动器。然后键入 x 启用专家功能,然后键入 z ,删除 GPT 数据结构。当提示清除 MBR 时,输入 Y 以清除它并重新开始,或 N 以保留它。 在后一种情况下,硬盘最终会有一个单一的 EFI 分区。之后,你可以启动 fdisk,将分区的类型改为你偏好的类型。在这个例子中,只有 GPT 被破坏。

# 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 分区类型

  • openSUSE 的安装器会自动选择 swap 分区大小;swap 分区的合适大小是一个没有统一标准的问题,所以下文所提及的 swap 的大小推荐值并非普遍适用标准。
  • 由于磁盘的读写性能无法和 RAM 相提并论,我们鼓励更积极地使用 RAM 来提高运行性能。
  • 有关调整 swap 使用优先级的操作,详见:SWAP

SWAP 空间是一个磁盘交换分区或者一个交换文件,你的计算机可以从 RAW “交换出” (系统需要的内存比物理内存更多时)当前不使用的数据,然后将再次需要使用的数据(一个程序调用被临时存储在 swap 空间的文件时,这些文件会重新载入 RAW 之中) “交换入” RAW 之中。通常情况下,交换空间的大小是物理内存(RAM)的两倍。有时会出现过度交换或 "激动(thrashing)" 的情况,即数据被交换出去,然后很快被交换进来,然后又被交换出去,如此反复。在这种情况下,系统会努力寻找空闲的内存,并保持应用程序同时运行。在这种情况下,只有添加更多的内存才会有帮助。尽管最好不要超过你的内存(当你交换时,性能会受到影响),但交换总比进程失败要好。

创建一个 swap 文件

由于 openSUSE 默认的文件系统是 btrfs , 我们并不推荐使用 swapfile 作为交换区。如果你真的想要这么做,你应当创建一个单独的 btrfs 子卷(并禁用写时复制(CoW)特性),然再在子卷中创建 swap 文件。

为了从文件中创建一个交换区域。首先,你需要创建一个空文件,文件大小为你需要的 swap 空间大小。

在这个例子中,将使用 dd 命令在 / 下创建一个大小为 1 GiB ,名为 swapfile 的文件。

首先,你指定输入文件 if=/dev/zero/dev/zero 是类 Unix 操作系统中的一个特殊文件,它提供尽可能多的空字符(ASCII NUL,0x00),从它那里读出。它被用来创建只有零的文件或内存页。),然后用 of=/path/to/where_you_want/to_store_swap 指定输出文件。bs=1M 意味着你将一次读写最多 1M(兆字节,MiB),count=1024 将重复写入1024次。

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

在创建后,你需要使用 mkswap 命令将这个文件转换成一个 swap 文件:

# mkswap /swapfile


设置正确的权限:

# chmod 600 /swapfile


然后,为使该 swap 为此电脑所用,使用 swapon 命令:

# swapon /swapfile


编辑 /etc/fstab 配置,为 swap 文件添加一个新条目:

# /swapfile none swap defaults 0 0


如果你需要禁用 swap ,你可以使用 swapoff 命令:

# swapoff /swapfile


创建一个 swap 分区

在系统安装过程中,通过会自动创建一个交换分区。然而,你可以在系统安装后创建它。下列是如何创建一个交换分区的步骤。别忘了将它的分区类型设置为 Linux Swap。在创建后,你可以用 mkswap 命令将其格式化,然后用 swaponswapoff 命令启用或禁用该分区。

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


删除一个 swap 分区

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

1) 禁用 swap

# swapoff /dev/sdX


2) 删除或注释掉(在条目之前加入 #) /etc/fstab 中的条目。该文件包含卷,操作系统在启动时挂载的磁盘。

# vim etc/fstab

# nano etc/fstab

在这个例子中,fstab 文件包含两个由 UUID 标识的交换文件。第一个标识符以 "3ae" 开头的文件被挂载,而第二个 UUID 以 9058 开头的文件已经被注释掉了,这意味着操作系统忽略了这个记录。第三个是以 "root" 身份挂载的分区,格式为 btrfs 文件系统。

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 或者 vi ,你可以考虑使用 nano 编辑该文件。

如果你以前没有使用过VIM,按i进入 "编辑 "模式,按escape返回到命令模式。要保存文件,进入命令模式(ESC)并输入 :wq ,这代表 command(命令) write(写入)quit(退出)

3) 重构并初始化 ramdisk :

# dracut -f


4) 可能是 GRUB 仍然指向交换分区来恢复系统。如果不改变这一点,systemd 就会在寻找分区或文件时超时,大大延长了启动时间。通过打开 GRUB 的 CMD_Line 文件,删除恢复的部分 打开文件:

vim /etc/default/grub

nano /etc/default/grub


然后寻找 GRUB_CMDLINE_LINUX_DEFAULT 行,如果你看到一个恢复参数,就删除它,这样:

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

改成这样:

GRUB_CMDLINE_LINUX_DEFAULT="splash=silent quiet showopts"

保存 ":wq"

5) 现在你需要通过输入以下几行将管理的变化应用到 GRUB 的命令行中。

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


6) 重启系统。


外部链接

另见