磁盘分区
主分区、扩展分区、逻辑分区的关系
在Linux系统下(其他操作系统也有类似的规定),磁盘的分区大致可以分为三类,分别为主分区、扩展分区和逻辑分区等等。
Linux系统管理员在部署系统时,必须要对这三个分区进行一个合理的规划,否则的话会浪费宝贵的硬盘空间。
通常情况下,一个硬盘中最多能够分割四个主分区。因为硬盘中分区表的大小只有64Bytes,而分割一个分区就需要利用16Bytes空间来存储这个分区的相关信息。
由于这个分区表大小的限制,硬盘之能够分给为四个主分区。如果此时一块硬盘有120个G,而管理员划分了4个主分区,每个主分区的空间为20个G。
那么总共才用去了80G的空间。这块硬盘剩余的40G空间就将无法使用。这显然浪费了硬盘的空间。
为了突破这最多四个主分区的限制,Linux系统引入了扩展分区的概念。即管理员可以把其中一个主分区设置为扩展分区(注意只能够使用一个扩展分区)来进行扩充。
而在扩展分区下,又可以建立多个逻辑分区。也就是说,扩展分区是无法直接使用的,必须在细分成逻辑分区才可以用来存储数据。
通常情况下,逻辑分区的起始位置及结束位置记录在每个逻辑分区的第一个扇区,这也叫做扩展分区表。
在扩展分区下,系统管理员可以根据实际情况建立多个逻辑分区,将一个扩展分区划割成多个区域来使用。
MBR分区
MBR:Master Boot Record, MBR磁盘分区是一种使用最为广泛的分区结构,它应用于Windows系统平台,Linux系统平台和基于X86的UNIX等系统平台。
实现原理
使用位于磁盘的0号扇区(一扇区等于512字节),来表示整个磁盘的整体分区情况,整个0号扇区简称为MBR扇区。
从硬件角度讲,MBR分区是按柱面进行的,也就是说,磁盘上的同一柱面只能归于一个分区。但是,在CentOS 6.8上,同一柱面上的不同扇区可以属于不同分区。
MBR扇区组成
MBR扇区由引导代码、MBR分区表、MBR结束标志3部分构成,一共占用512个字节。
其中引导代码占用446个字节,MBR分区占用64个字节,MBR结束标志占用2个字节,MBR扇区一共占用512个字节。
引导代码:占MBR分区的前446字节,负责整个系统的启动。如果引导代码被破坏,系统将无法启动
MBR分区:占引导代码后面的64个字节,是整个硬盘的分区表。每个分区使用的字节为16个,所以这确定了MBR分区方式最多只有4个主分区(包含扩展分区在内)。
MBR结束标志:占用最后2个字节,一直为"55AA".
分区规则
1.一块磁盘上主分区和扩展分区的个数总和不能超过4个
2.一块磁盘上最多只能有1个扩展分区
3.扩展分区中可以创建逻辑分区,个数限制视磁盘类型而定
查看fdisk的帮助信息
Command (m for help): m Command action d delete a partition 删除一个分区 m print this menu 显示帮助菜单 n add a new partition 创建一个分区 p print the partition table 显示分区表 q quit without saving changes 退出不保存 w write table to disk and exit 保存并退出
添加一块100M的硬盘并把它永久挂载到/mnt上,写出详细的操作步骤 答: #1)分区 [root@oldboyedu01-nb ~]# fdisk /dev/sdb Command (m for help): p Disk /dev/sdb: 106 MB, 106954752 bytes 64 heads, 32 sectors/track, 102 cylinders Units = cylinders of 2048 * 512 = 1048576 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-102, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-102, default 102): Using default value 102 Command (m for help): p Disk /dev/sdb: 106 MB, 106954752 bytes 64 heads, 32 sectors/track, 102 cylinders Units = cylinders of 2048 * 512 = 1048576 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System /dev/sdb1 1 102 104432 83 Linux Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. #2)通知系统/dev/sdb硬盘的磁盘分区表变化了 partprobe /dev/sdb #3格式化创建文件系统 [root@oldboyedu01-nb ~]# #make filesystem [root@oldboyedu01-nb ~]# mkfs.ext4 /dev/sdb1 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) Stride=0 blocks, Stripe width=0 blocks 25896 inodes, 103424 blocks 5171 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=67371008 13 block groups 8192 blocks per group, 8192 fragments per group 1992 inodes per group Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729 Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 36 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. #4.关闭磁盘分区的自动检查 [root@oldboyedu01-nb ~]# tune2fs -c 0 -i 0 /dev/sdb1 tune2fs 1.41.12 (17-May-2010) Setting maximal mount count to -1 Setting interval between checks to 0 seconds #-c 0 count 关闭每挂载多少次进行磁盘检查的功能 #-i 0 interval 关闭每个180天进行磁盘检查功能 #5.进行磁盘分区挂载 [root@oldboyedu01-nb ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 8.8G 8.8G 0 100% / tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/sda1 190M 40M 141M 22% /boot [root@oldboyedu01-nb ~]# [root@oldboyedu01-nb ~]# mount /dev/sdb1 /mnt/ [root@oldboyedu01-nb ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 8.8G 8.8G 0 100% / tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/sda1 190M 40M 141M 22% /boot /dev/sdb1 94M 1.6M 88M 2% /mnt #6.进行永久挂载(如何在开机的时候自动挂载) ###方法 1./etc/rc.local /bin/mount /dev/sdb1 /mnt/ ###方法 2./etc/fstab UUID=6b8ba13d-2833-49be-8206-deb002d2d523 / ext4 defaults 1 1 UUID=e01d5cbd-b233-44b9-832d-15225cc4d8ff /boot ext4 defaults 1 2 UUID=7c5f5672-9c30-444c-a273-1350c6a06130 swap swap defaults 0 0 #/dev/sdb1 /mnt ext4 defaults 0 0 [root@oldboyedu01-nb ~]# umount /mnt [root@oldboyedu01-nb ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 8.8G 8.8G 0 100% / tmpfs 1.9G 0 1.9G 0% /dev/shm /dev/sda1 190M 40M 141M 22% /boot
GPT分区表介绍
GPT的全称是Globally Unique Identifier Partition Table,意即GUID分区表,它的推出是和UEFI BIOS相辅相成的,
鉴于MBR的磁盘容量和分区数量已经不能满足硬件发展的需求,GPT首要的任务就是突破了2.2T分区的限制,最大支持18EB的分区。
而在分区数量上,GPT会为每一个分区分配一个全局唯一的标识符,理论上GPT支持无限个磁盘分区,不过在Windows系统上由于系统的限制,最多只能支持128个磁盘分区,基本可以满足所有用户的存储需求。在每一个分区上,这个标识符是一个随机生成的字符串,可以保证为地球上的每一个GPT分区都分配完全唯一的标识符。
而在安全性方面,GPT分区表也进行了全方位改进。在早期的MBR磁盘上,分区和启动信息是保存在一起的。如果这部分数据被覆盖或破坏,事情就麻烦了。相对的,GPT在整个磁盘上保存多个这部分信息的副本,因此它更为健壮,并可以恢复被破坏的这部分信息。GPT还为这些信息保存了循环冗余校验码(CRC)以保证其完整和正确——如果数据被破坏,GPT会发觉这些破坏,并从磁盘上的其他地方进行恢复。
小结:所以对于新平台用户(Intel 6系以后/AMD 900系列以后和A系列)来说,都强烈推荐使用GPT分区表格式,目前包括Windows Vista、7、8、8.1、10已经都支持读取和使用GPT分区表。而对于使用Windows 8、8.1、10的用户,换用GPT后开机启动速度也可以进一步得到显著提升。
parted
p[rint] 显示磁盘分区表信息
mklabel 创建磁盘分区表
gpt
msdos(mbr)
mkpart 创建分区
rm 删除分区
q 退出不保存
创建分区表
root@znix ~]# parted /dev/sdc GNU Parted 2.1 Using /dev/sdc Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) mklabel gpt #创建GPT分区表 (parted) p Model: VMware, VMware Virtual S (scsi) Disk /dev/sdc: 107MB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags
mkpart 可以使用的PART-TYPE类型
(parted) help mkpart mkpart PART-TYPE [FS-TYPE] START END make a partition PART-TYPE is one of: primary, logical, extended 主分区 ,逻辑分区 ,扩展分区
对磁盘进行分区
(parted) mkpart primary 0 10 Warning: The resulting partition is not properly aligned for best performance. 提示分区没有对齐,这个错误无视即可。 Ignore/Cancel? I 忽略/取消 (parted) p Model: VMware, VMware Virtual S (scsi) Disk /dev/sdc: 107MB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 17.4kB 10.0MB 9983kB primary
再创建一个分区
(parted) mkpart primary 10 20 (parted) p Model: VMware, VMware Virtual S (scsi) Disk /dev/sdc: 107MB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 17.4kB 10.0MB 9983kB primary 2 10.5MB 19.9MB 9437kB primary
注意:parted 创建分区实时生效,比较危险。
使用parted命令非交互式创建分区
[root@znix ~]# parted /dev/sdc mkpart primary 50 100 Information: You may need to update /etc/fstab. [root@znix ~]# parted /dev/sdc print #显示磁盘的格式 Model: VMware, VMware Virtual S (scsi) Disk /dev/sdc: 107MB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 17.4kB 50.0MB 50.0MB primary 2 50.3MB 99.6MB 49.3MB primary