一、Linux硬盘分区基本原理

1. 分区表类型

  • MBR(Master Boot Record)
  • 早期Linux为兼容Windows磁盘使用。开机管理程序和分区表保存在磁盘第一个扇区(512bytes大小),其中开机管理程序占用446bytes,分区表占用64bytes。分区表只能保存四组记录,代表四个分区,每条记录记录一个分区的开始和结束磁柱号(旧硬盘以磁柱为分区最小单位,新磁盘基本采用扇区作为分区最小单位)。一个硬盘最多只能有四个主分区和扩展分区,扩展分区可以包含多个逻辑分区,逻辑分区从5开始编号,1
  • 4只能是主分区和扩展分区。MBR每个分区数据只有16Bytes,存在操作系统无法支持2.2T以上容量、MBR第一个扇区无备份若损坏很难救援、MBR开机管理程序只有446bytes容纳程序代码较少等限制。
  • GPT(GUID Partition Table)
  • 按照LBA(Logical Block Address)(预设512bytes)划分,使用前34个LBA记录分区信息,同时使用最后33个LBA备份分区信息。LBA0又称为MBR兼容区块,446bytes存储开机管理程序,原本分区记录表内保存特殊标志表明磁盘采用GPT分区;LBA1记录分区表本身位置与大小、备份用GPT分区位置和分区表校验码;LBA2
  • 33从LBA2开始,每个LBA记录四笔分区记录,总共可以记录128个分区,每个分区表记录占用128byte,分区大小限制明显变大。
  • 2. 分区与文件系统关系

  • Linux无论有多少个分区,分给哪一个目录,整个文件系统只有一个根目录,每个分区都是组成整个文件系统的一部分,使用“载入”的处理办法,将分区和目录联系起来,载入一个分区,使其存储空间在一个目录下获得。
  • 二、Linux硬盘分区的常用方法

    Linux硬盘分区全解析:原理、方法与注意事项

    1. 查看磁盘分区信息

  • 使用`fdisk -l`命令可以查看所有硬盘的分区信息,包括没有挂载的分区和USB设备等。
  • 也可以使用`sfdisk -uM -l`、`cfdisk`、`parted`、`df`等命令查看磁盘分区相关信息。
  • 2. 创建分区

  • 使用fdisk创建分区
  • 打开终端,使用root权限登录系统,运行命令`fdisk -l`查看当前硬盘分区情况,再运行命令`fdisk /dev/sda`(假设对sda硬盘操作)进入fdisk交互式界面。按下n键创建新分区,选择分区类型(如主分区p或扩展分区e),指定分区起始和结束位置,重复创建更多分区,最后按下w键保存并退出fdisk。
  • 使用parted创建分区
  • 打开终端,使用root权限登录系统,运行命令`parted /dev/sda`进入parted交互式界面,可运行命令`mklabel gpt`创建GPT分区表(可选),然后运行命令`mkpart primary ext4 1MiB 100GiB`创建新分区,重复创建更多分区,最后运行命令`quit`退出parted。
  • 3. 格式化分区

  • 对硬盘分区之后,需要格式化才能使用。使用`mkfs`命令,如`mkfs.ext4 /dev/sda1`将分区格式化为ext4文件系统,也可以使用`mkfs.xfs /dev/sdb1`将分区格式化为XFS文件系统、`mkfs.btrfs /dev/sdc1`将分区格式化为Btrfs文件系统等。
  • 4. 挂载分区

  • 创建挂载点(如`mkdir /mnt/data`),然后运行命令`mount /dev/sda1 /mnt/data`将分区挂载到指定挂载点。可以使用`df -h`查看已挂载的分区。
  • 5. 自动挂载

  • 为了方便管理,可配置系统在启动时自动挂载分区。编辑`/etc/fstab`文件,在文件末尾添加一行,指定分区的设备路径、挂载点、文件系统类型和挂载选项,例如`/dev/sda1 /mnt/data ext4 defaults 0 0`,保存并退出`fstab`文件后,运行命令`mount -a`重新加载`fstab`文件,使配置生效。
  • 6. 卸载分区

  • 当不再需要使用某个已经挂载的设备时,使用`umount`命令卸载,如`umount /dev/sda1`或者`umount /mnt/data`(推荐通过挂载点卸载)。
  • 三、Linux硬盘分区的注意事项

    Linux硬盘分区全解析:原理、方法与注意事项

    1. /boot分区

  • 为了确保系统的稳定性,通常不将/boot分区放在卷组内,因为大多数引导加载程序无法识别LVM结构。
  • 2. 备份策略

  • 由于分区表的重要性,尤其是MBR分区表的脆弱性(如无备份、易损坏等),需要制定合适的备份策略,以防止分区表损坏导致的数据丢失。
  • 3. 挂载点选择

  • 不同的挂载点有不同的用途,例如:
  • `/media`用于移动介质的挂载点。
  • `/mnt`用于临时挂载文件系统或者别的硬件设备(如光驱、软驱)。
  • `/proc`系统信息的虚拟目录(2.4和2.6内核),这些信息是在内存中,由系统自己产生的。
  • `/root`root用户的目录。
  • `/sbin`基本系统命令执行文件。
  • `/sys`系统信息的虚拟目录(2.6内核)。
  • `/srv`系统提供的用于service的数据。
  • `/usr/X1186`X
  • Windows目录,存放一些X - Windows的配置文件。
  • `/usr/include`系统头文件,存储一些C语言的头文件。
  • `/usr/src`Linux内核源代码,Linux系统所安装的内核源代码都保存在此。
  • `/usr/bin`对/bin目录的一些补充。
  • `/usr/sbin`对/sbin目录的一些补充。
  • `/lost+found`这个目录在大多数情况下都是空的,但如果系统异常关机,有些文件会放在这个目录下。
  • `/boot`必须总是物理地包含/etc、/bin、/sbin、/lib和/dev,否则将不能启动系统。
  • `/home`每个用户将放置他的私有数据到这个目录的子目录下。
  • `/tmp`程序创建的临时数据大都存到这个目录。
  • `/usr`包含所有的用户程序(/usr/bin),库文件(/usr/lib),文档(/usr/share/doc)等。
  • `/var`所有的可变数据,如新闻组文章、电子邮件、网站、数据库、软件包系统的缓存等,将被放入这个目录,做服务器的话空间应尽量大。
  • 4. 使用UUID挂载

  • 在`/etc/fstab`中使用UUID挂载分区,以避免因硬盘顺序变化导致的分区识别混乱问题。可以通过`/dev/disk/by-uuid/`下的设备文件信息、`vol_id`命令或者`blkid`命令获取分区的UUID,然后在`fstab`中像这样配置:`UUID=1234-5678 /mnt/usb vfat utf8,umask=0 0 0`。
  • 5. 分区操作风险

    分区操作是高危操作,尤其是新手同学请勿在生产环境随意尝试,否则后果自负。