Linux 磁盘分区之分区篇

运维 系统运维
合理分配磁盘空间布局,我们该掌握一些什么?这篇文章介绍了Linux硬盘布局的规划。首先介绍了Linux文件系统的概述,然后详细陈述了Linux下的硬盘分区,那么如何分配磁盘空间呢?我们该做出什么样的选择?

了解如何在 Linux 统中设计磁盘分区的布局。您可以运用本文中的资料来学习。这一节讲述的是Linux 磁盘分区之分区篇。

一、分区

  第一个 SCSI 驱动器通常是 /dev/sda。在较早的 Linux 系统中,第一个 IDE 硬盘驱动器是 /dev/hda。随着串行(SATA)IDE 驱动器的发明,混合 PATA/SATA 系统有时会使用 /dev/hda 作为第一个 PATA 驱动器,使用 /devsda 表示第一个 SATA 驱动器。在较新的系统上,所有 IDE 驱动器都命名为 /dev/sda、/dev/sdb 等。IDE 驱动器名称的更改是热插拔 系统造成的,最初支持的是 USB 驱动器。热插拔允许您在插入新设备后立即开始使用新设备,而现在这种命名用于所有设备,无论是内置于系统之中的设备,还是随后使用 USB 或 Firewire(IEEE 1394)或其他类型的连接插入正在运行的系统的设备。

  传统上,硬盘驱动器会格式化为 512 字节的扇区。磁盘盘片在无需移动磁头的前提下即可读取的所有扇区组成一个磁道。磁盘通常具有多个盘片。各盘片上在无需移动磁头的前提下即可读取的磁道的集合称为柱面。硬盘驱动器的设定参数 使用柱面、每个柱面的磁道(或磁头)数以及扇区/磁道表示。在本文撰写之时,驱动器制造商开始生产具有 4K 扇区的磁盘。如果文件系统仍然假定使用 512 字节的扇区,而某个分区并非从位于 4K 边界的扇区开始,则将导致性能降低。

  PC 系统上 DOS 操作系统中对于柱面、磁头和扇区大小的限制带来了 BIOS 转换的设定参数,以支持更大的硬盘驱动器。最终,即便这样的方法也不足以解决问题。磁盘驱动器技术的最新发展带来了逻辑块寻址(LBA),因而 CHS 设定参数指标的重要性有所降低,现代磁盘上报告的设定参数可能与物理扇区布局关系不大或者完全无关。如今,我们使用的磁盘更大,这迫使 LBA 推出了称为 LBA48 的扩展,最多可保留 48 个位供扇区号使用。

  硬盘驱动器上的空间划分(或者说分区)为多个分区。分区不能重叠,未分配给分区的空间称为剩余空间。分区名的形式类似于 /dev/hda1、/dev/hda2、/dev/hda3、/dev/sda1 等。在未使用 IDE 驱动器热插拔支持的系统上,IDE 驱动器最多支持 63 个分区。通过热插拔支持的 SCSI 驱动器、USB 驱动器和 IDE 驱动器最多可有 15 个分区。一个分区通常会分配为整数个柱面(柱面概念可能存在不准确之处)。

  如果两种不同的分区程序对于指定的磁盘设定参数有着不同的理解,就有可能出现一种分区程序在遇到另一个分区程序创建的分区时报错或发生问题的情况。如果将磁盘从一个系统移动到另一个系统,也可能会出现此类问题,若两个系统的 BIOS 功能不同则更容易出现问题。

  在 Linux 系统中,您可以使用 parted 或 fdisk 工具查看指定设定参数。较早版本的 Linux 参数也会在 /proc 文件系统中一个类似于 /proc/ide/hda/geometry 的文件中报告设定参数,而在较新版本的系统中可能无法找到这个文件。清单 1 展示了如何使用 fdisk 命令来显示附加 SATA 的 IDE 硬盘驱动器的分区和设定参数。fdisk 的 -v 参数显示版本。要显示或操纵分区表,您需要是 root 用户,或者通过 sudo 命令获得 root 权限,如本清单所示。

  清单 1. 硬盘设定参数

  ian@attic4:~$ fdisk -v

  fdisk (util-linux-ng 2.16)

  ian@attic4:~$ sudo fdisk /dev/sdb

  [sudo] password for ian:

  The number of cylinders for this disk is set to 30401.

  There is nothing wrong with that, but this is larger than 1024,

  and could in certain setups cause problems with:

  1) software that runs at boot time (e.g., old versions of LILO)

  2) booting and partitioning software from other OSs

  (e.g., DOS FDISK, OS/2 FDISK)

  Command (m for help): p

  Disk /dev/sdb: 250.1 GB, 250059350016 bytes

  255 heads, 63 sectors/track, 30401 cylinders

  Units = cylinders of 16065 * 512 = 8225280 bytes

  Disk identifier: 0x000404d6

  Device Boot Start End Blocks Id System

  /dev/sdb1 1 25 200781 83 Linux

  /dev/sdb2 26 12965 103940550 83 Linux

  /dev/sdb3 12966 30401 140054670 83 Linux

  Command (m for help):

  在清单 1 中,请注意 fdisk 将打印一条关于柱面 1024 末尾指定位置的警告。某些旧版系统的 BIOS 仅能引导位于磁盘的前 1024 个柱面内的分区,在这种情况下,柱面 1024 极为重要。这很可能出现在没有 LBA 支持的 BIOS 中或者某些旧版本的引导管理器中。在现代机器中,这通常不会造成问题,但您应该注意,可能存在这样的限制。

  您可以使用 fdisk 显示扇区中的单元,使用 -u 选项即可,也可在交互模式中使用 u 子命令在扇区和柱面之间切换。parted 命令支持多种不同的单元。清单 2 展示了清单 1 所示的同一个磁盘内的 parted 中不同单元的使用。

#p#

  清单 2. 使用 parted 的不同单元

  ian@attic4:~$ sudo parted /dev/sdb

  [sudo] password for ian:

  GNU Parted 1.8.8.1.159-1e0e

  Using /dev/sdb

  Welcome to GNU Parted! Type 'help' to view a list of commands.

  (parted) help u

  unit UNIT set the default unit to UNIT

  UNIT is one of: s, B, kB, MB, GB, TB, compact, cyl, chs, %, kiB, MiB,

  GiB, TiB

  (parted) p

  Model: ATA HDT722525DLA380 (scsi)

  Disk /dev/sdb: 250GB

  Sector size (logical/physical): 512B/512B

  Partition Table: msdos

  Number Start End Size Type File system Flags

  1 32.3kB 206MB 206MB primary ext3

  2 206MB 107GB 106GB primary ext4

  3 107GB 250GB 143GB primary ext3

  (parted) u s

  (parted) p

  Model: ATA HDT722525DLA380 (scsi)

  Disk /dev/sdb: 488397168s

  Sector size (logical/physical): 512B/512B

  Partition Table: msdos

  Number Start End Size Type File system Flags

  1 63s 401624s 401562s primary ext3

  2 401625s 208282724s 207881100s primary ext4

  3 208282725s 488392064s 280109340s primary ext3

  (parted) u chs

  (parted) p

  Model: ATA HDT722525DLA380 (scsi)

  Disk /dev/sdb: 30401,80,62

  Sector size (logical/physical): 512B/512B

  BIOS cylinder,head,sector geometry: 30401,255,63. Each cylinder is 8225kB.

  Partition Table: msdos

  Number Start End Type File system Flags

  1 0,1,0 24,254,62 primary ext3

  2 25,0,0 12964,254,62 primary ext4

  3 12965,0,0 30400,254,62 primary ext3

  (parted)

  请注意,parted 和 fdisk 输出所显示的起始柱面和结束柱面截然不同,这是由于 parted 从零开始计算柱面,而 fdisk 从 1 开始计算。清单 3 表明,fdisk 与 parted 的起始扇区和结束扇区实际上是完全相同的。

  清单 3. 检查起始和结束扇区号

  ian@attic4:~$ sudo fdisk -ul /dev/sdb

  Disk /dev/sdb: 250.1 GB, 250059350016 bytes

  255 heads, 63 sectors/track, 30401 cylinders, total 488397168 sectors

  Units = sectors of 1 * 512 = 512 bytes

  Disk identifier: 0x000404d6

  Device Boot Start End Blocks Id System

  /dev/sdb1 63 401624 200781 83 Linux

  /dev/sdb2 401625 208282724 103940550 83 Linux

  /dev/sdb3 208282725 488392064 140054670 83 Linux

  ian@attic4:~$ echo $(( 208282725 / 255 / 63 ))

  12965

#p#

二、分区类型

  IDE 驱动器上有三种类型的分区:主、逻辑 和扩展。分区表 位于磁盘主引导记录(MBR)之中。MBR 是磁盘上的第一个扇区,因而分区表在其中所占空间不大。这限制了一个磁盘上的主分区数量,最多为 4 个。如果需要 4 个以上的主分区(往往需要 4 个以上的主分区),其中一个主分区就必须以扩展分区的形式出现。

  扩展分区 就是一个或多个逻辑分区的容器。这种分区模式最初是由 MS DOS 和 PC DOS 采用的,允许 DOS、Windows 或 Linux 系统使用 PC 磁盘。一个磁盘可能仅包含一个扩展分区。数据存储在扩展分区内的逻辑分区中。必须首先在扩展分区内创建一个逻辑分区,之后才能将数据存储到扩展分区中。

  Linux 将主分区或扩展分区编号为 1 至 4,因而 dev/sda 可能拥有四个主分区:/dev/sda1、/dev/sda2、/dev/sda3、/dev/sda4。也可以有一个主分区 /dev/sda1 和一个扩展分区 /dev/sda2。如果定义了逻辑分区,则逻辑分区的编号从 5 开始,/dev/sda 上的第一个逻辑分区将为 /dev/sda5,即便磁盘上不存在主分区,只有一个扩展分区也是如此(/dev/sda1)。因此,如果您希望一个 IDE 驱动器上有四个以上的分区,就需要给扩展分区分配一个分区号。尽管理论上支持热插拔的内核的 IDE 驱动器分区数量理论上最多为 15 个,但您也许能创建最后几个,也可能无法创建最后几个。如果您计划在一个驱动器上使用超过 12 个分区,应务必谨慎地检查所有方面。

  上面的示例中使用的磁盘具有三个主分区,均格式化为供 Linux 使用。其中两个主分区使用 ext3 文件系统,而另一个主分区使用 ext4 文件系统。清单 4 展示了针对 Ubuntu 9.10 系统上带有主、扩展和逻辑分区的内部驱动器和附加到 Fedora 12 系统的 USB 驱动器的 parted 命令 p 的输出结果。请注意不同的文件系统类型。另外还要注意,您可以在命令行中指定一个或多个 parted 命令,避免使用交互模式。

  清单 4. 使用 parted 命令显示分区表

  ian@attic4:~$ sudo parted /dev/sda u s p

  [sudo] password for ian:

  Model: ATA WDC WD6401AALS-0 (scsi)

  Disk /dev/sda: 1250263728s

  Sector size (logical/physical): 512B/512B

  Partition Table: msdos

  Number Start End Size Type File system Flags

  1 63s 2040254s 2040192s primary ext3

  2 2040255s 22523129s 20482875s primary linux-swap(v1)

  4 22523130s 1250258624s 1227735495s extended boot

  5 22523193s 167397299s 144874107s logical ext3

  6 167397363s 310761359s 143363997s logical ext3

  7 310761423s 455442749s 144681327s logical ext3

  8 455442813s 600092009s 144649197s logical ext3

  [root@echidna ~]# parted /dev/sdc p

  Model: WD My Book (scsi)

  Disk /dev/sdc: 750GB

  Sector size (logical/physical): 512B/512B

  Partition Table: msdos

  Number Start End Size Type File system Flags

  1 32.3kB 135GB 135GB primary fat32 lba

  2 135GB 750GB 616GB extended

  5 135GB 292GB 157GB logical ext3

  6 292GB 479GB 187GB logical ext3

  7 479GB 555GB 76.5GB logical ext3

  8 555GB 750GB 195GB logical ext3

【编辑推荐】

  1. 3.2.5 Linux安装模式下,磁盘分区的选择(极重要)
  2. Linux磁盘分区的操作工具与命令使用
  3. 简单剖析Linux磁盘分区命令
  4. 让Linux操作系统支持FAT格式的磁盘分区
  5. Linux配置文件
  6. Linux下文件的清理

 

责任编辑:zhaolei 来源: 网络转载
相关推荐

2011-01-18 10:25:19

Linux磁盘分区

2011-01-18 10:00:59

Linux磁盘分区

2014-06-06 13:51:36

磁盘分区IO分析

2009-10-19 18:01:35

Linux磁盘分区

2014-05-30 09:44:18

磁盘分区Windows平台

2014-06-09 10:09:31

Linux磁盘分区

2019-02-11 14:50:21

Linux分区命令

2017-03-09 14:58:19

GPartedLinux磁盘分区

2023-01-31 14:00:01

TIAPUUID

2022-04-12 17:39:14

Linux磁盘分区

2018-06-25 11:58:23

Linuxparted磁盘分区

2010-03-02 15:09:26

Linux mount

2013-08-23 14:07:45

磁盘分区

2017-05-10 07:00:20

磁盘分区dcfldd工具备份分区

2009-12-15 08:50:58

Windows 7系统分区

2017-09-13 09:23:04

磁盘分区bash

2020-01-11 19:00:01

GParted磁盘分区工具开源

2010-06-24 15:53:10

Linux指令

2021-07-30 23:05:22

Windows 11Windows微软

2010-02-25 13:34:24

Linux磁盘分区
点赞
收藏

51CTO技术栈公众号