SDB:分区
目录
分区方案
Linux 至少需要一个分区,也就是分配给 / 的根文件系统。但是,为特定的目录建立单独的分区是很常见的,例如 /home。你所创建的不同的分区都会通过你选定的挂载点,挂载至 / 分区之下。对于一个标准的、通用的安装,你会拥有一个 / 、/boot 和 SWAP 分区。然而,不同的目的有不同的安装方法,所以,下面列举了一些可以被分为一个单独分区的目录:
/boot - 挂载在 /boot 的分区包含了操作系统内核,在引导过程中相关的文件。对于大多数的用户,一个单独的 500 MB 大小的分区是足够。
swap - 通常应该是你硬件系统装载的内存的两倍(见第3节)。
/home - 将用户的家目录放置在一个单独的分区是很有用的。即便 / 分区出现故障或损毁,用户数据也有很大机会保持完整。反过来说,即便用户的 /home 出现空间不足的情况,系统仍然可以正常运转。
/usr - 包含了系统的大部分库和数据。创建一个单独的 /usr 分区,如果你需要从头开始重新安装系统,可以使更新系统变得更容易。
/opt - 如果你安装了第三方产品,你可能需要一个单独的 /opt 分区,这会在系统升级的过程中保留已安装的第三方程序。
/srv - 如果你将你的系统作为一个服务器,创建一个单独的 /srv 分区,因为它包含了网络和 FTP 服务器。
/tmp - 把 /tmp 放在一个单独的文件系统中,将临时文件限制在一个有限的大小,并省去了备份它们的麻烦。
/var - 因为日志文件保存在 /var ,将其划分为一个单独的分区是一个不错的主意。如果把 /var 作为一个容量小的根分区的一部分,使得 / 很容易被填满,并使机器停转。
分区表
MBR
MBR (Master Boot Record,主引导记录)位于硬盘的第一个扇区(512 字节) ,它包含三部分:
- - 引导程序,它驻留在前 446 个字节中。
- - 分区表驻留在接下来的 64 个字节中(4 个条目,每个 16 字节,每个主分区一个条目)。
- - 最后两个字节包含引导记录的签名(55AA)。
MBR 限制磁盘大小不能超过 2TB 。你只能创建4个主要分区,或者3个主要分区加上一个扩展分区,你可以根据自己的需要进一步分区(最多24个逻辑分区)。它被用于有 BIOS(基本输入/输出系统)的计算机中。
在 MBR 之下分区
在 MBR 之下使用的分区工具是 fdisk 。
首先,如果你不知道磁盘的名称,你可以使用下列命令列出系统中的所有磁盘:
如果你知道磁盘的名称,用 fdisk 选择它,然后编辑这个分区:
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):
一旦你进入 fdisk 提示,建议你先看看当前的分区。在下面的例子中,显示了一个 15 GiB的 USB,它包含两个分区,/dev/sdb1 和 /dev/sdb2:
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的空间。
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 。
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'.
在这个例子中,剩余的空间被分配给一个扩展分区。这个过程与主分区的过程类似。创建后,你可以继续添加更多的逻辑分区。
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 执行该操作:
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),然后运行下列命令同步磁盘分区表至系统内核:
现在,分区已经创建,分区表也已写入磁盘,最后一步就是为新建分区写入文件系统。例如这个任务中,使用 mkfs 命令和文件系统的名称(如果你不指定文件系统的名称,那么 mkfs 会自动创建一个 ext2 文件系统)。在这个例子中,两个分区(也就是样例中的 /dev/sdb3 和 /dev/sdb5 )会被格式化成一个 FAT32 分区和一个 ext4 分区。
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 ,检查你的驱动器名称。
GPT fdisk (gdisk) version 0.8.8
Problem opening -l for reading! Error is 2.
The specified file does not exist!
要绕开这个,只需使用 fdisk 列出你的驱动器。
然后用 gdisk 选择该设备
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)。
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):
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 被破坏。
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 更改驱动器的分区。
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 文件
为了从文件中创建一个交换区域。首先,你需要创建一个空文件,文件大小为你需要的 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 文件:
设置正确的权限:
然后,为使该 swap 为此电脑所用,使用 swapon 命令:
编辑 /etc/fstab 配置,为 swap 文件添加一个新条目:
如果你需要禁用 swap ,你可以使用 swapoff 命令:
创建一个 swap 分区
在系统安装过程中,通过会自动创建一个交换分区。然而,你可以在系统安装后创建它。下列是如何创建一个交换分区的步骤。别忘了将它的分区类型设置为 Linux Swap。在创建后,你可以用 mkswap 命令将其格式化,然后用 swapon 或 swapoff 命令启用或禁用该分区。
删除一个 swap 分区
从系统使用中删除一个现有的交换分区需要从3个地方删除该分区:
1) 禁用 swap
2) 删除或注释掉(在条目之前加入 #) /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,按i进入 "编辑 "模式,按escape返回到命令模式。要保存文件,进入命令模式(ESC)并输入 :wq ,这代表 command(命令) write(写入) 和 quit(退出)
3) 重构并初始化 ramdisk :
4) 可能是 GRUB 仍然指向交换分区来恢复系统。如果不改变这一点,systemd 就会在寻找分区或文件时超时,大大延长了启动时间。通过打开 GRUB 的 CMD_Line 文件,删除恢复的部分 打开文件:
或
然后寻找 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 的命令行中。
6) 重启系统。