[Linux实用命令]-8-硬盘分区与管理

引言

这篇文章主要介绍Linux硬盘的管理。文中涉及几个常用的硬盘管理命令fdisk(硬盘分区等)、mkfs(分区的格式化)、mount(分区的挂载)。

文章目录

0×1.Linux硬盘和分区命名规则

在Linux中,硬盘是以设备文件的形式存在的,设备文件一般是在"/dev/"目录中,而对不同接口的硬盘,目录中对应的名称前缀稍有不同,下面是两种接口的硬盘前缀,其中IDE硬盘已经慢慢淡出历史舞台:

IDE接口硬盘盘符前缀为hd:
/dev/hd[a-p]
比如计算机有两块IDE接口的硬盘,那第一块IDE硬盘设备文件名就是:
/dev/hda
第二块就是:
/dev/hdb
以此类推;

SAS/SCSI/SATA/USB接口硬盘盘符前缀sd:
/dev/sd[a-p]
比如计算机有两块SATA接口的硬盘,那第一块SATA硬盘设备文件名称就是:
/dev/sda
第二块就是:
/dev/sdb
以此类推;

例如,当前我所使用的笔记本的硬盘就属于SATA接口:

					#可以从下面的信息分析出,我的笔记本有两块硬盘,主盘sda,从盘sdb,其中sda又划分了两个主分区分别是sda1和sda2,而从盘sdb划分了三个主分区sdb[1-3],以及逻辑分区sdb[4-5],逻辑分区占用一个主分区号,所以sdb3这个主分区号实际上下面是两个逻辑分区4-5
					qing@qingsword.com:~$ ls /dev/sd*
					/dev/sda   /dev/sda2  /dev/sdb1  /dev/sdb3  /dev/sdb5
					/dev/sda1  /dev/sdb   /dev/sdb2  /dev/sdb4
					

0×2.使用fdisk对硬盘进行管理

实验环境为CentOS7,两块硬盘分别是/dev/sda(主硬盘)和/dev/sdb(从盘,大小20G),使用/dev/sdb来演示这些命令的使用。

a.使用fdisk查看硬盘以及分区信息

fdisk是Linux下面的一个硬盘管理命令。可以查看当前环境有几块硬盘,每块硬盘的大小,每块硬盘上都划分了那些区域,还可以对硬盘进行分区、删除、改变分区文件系统类型等操作:

					#对硬盘的操作需要root权限,使用sudo执行命令,查看当前环境下硬盘的全局信息
					[root@localhost ~]# sudo fdisk -l

					#这是主硬盘/dev/sda的综合信息,部分字段解释如下:
					#硬盘类型sd,说明硬盘接口是"SAS/SCSI/SATA/USB"中的一种,总大小42.9 GB;
					#255 heads : 255个磁头;
					#63 sectors/track : 63个扇区;
					#5221 cylinders : 5221个磁柱;
					#Units = 每个磁柱容量;
					Disk /dev/sda: 42.9 GB, 42949672960 bytes
					255 heads, 63 sectors/track, 5221 cylinders
					Units = cylinders of 16065 * 512 = 8225280 bytes
					Sector size (logical/physical): 512 bytes / 512 bytes
					I/O size (minimum/optimal): 512 bytes / 512 bytes
					Disk identifier: 0x000e6c2b

					#这是主硬盘/dev/sda上的分区情况,部分字段解释如下:
					#Device下面显示的是设备分区号,Boot下面带*号的是引导分区;
					#Start和End是起始和结束的磁柱,通过起始和结束磁柱可以计算Blocks大小,计算方法(End-Start)*(Units/1024)小数点四舍五入;
					#Id是系统对文件系统的编号(83=Linux文件系统ext,7=NTFS文件系统);
					#System是文件系统的名称和ID对应,文件系统编号稍后会介绍到;
					Device     Boot  Start    End     Blocks    Id  System
					/dev/sda1   *       1     64      512000    83  Linux
					/dev/sda2          64     5222    41430016  8e  Linux LVM

					#还没有分区的从盘/dev/sdb
					Disk /dev/sdb: 21.5 GB, 21474836480 bytes
					255 heads, 63 sectors/track, 2610 cylinders
					Units = cylinders of 16065 * 512 = 8225280 bytes
					Sector size (logical/physical): 512 bytes / 512 bytes
					I/O size (minimum/optimal): 512 bytes / 512 bytes
					Disk identifier: 0x00000000
					

b.使用fdisk创建主分区

想要对某个盘进行操作,只需使用root权限输入fdisk后面接硬盘路径即可,新建主分区实例:

					#进入/dev/sdb这块硬盘的命令模式
					[root@localhost ~]# sudo fdisk /dev/sdb
					Command (m for help): m  #输入m,查看命令帮助

					Command action
					   a   toggle a bootable flag
					   b   edit bsd disklabel
					   c   toggle the dos compatibility flag
					   d   delete a partition
					   l   list known partition types
					   m   print this menu
					   n   add a new partition
					   o   create a new empty DOS partition table
					   p   print the partition table
					   q   quit without saving changes
					   s   create a new empty Sun disklabel
					   t   change a partition's system id
					   u   change display/entry units
					   v   verify the partition table
					   w   write table to disk and exit
					   x   extra functionality (experts only)

					#上面是fdisk支持的全部命令,下面是几个常用命令的解释:
					# d 删除一个分区;
					# l 显示一个分区文件类型列表,在这个列表会看所有的分区文件类型所对应的数字;
					# t 改变分区类型(配合l使用);
					# m 列出帮助信息;
					# n 新建一个分区;
					# p 列出分区表(fdisk -l是显示所有硬盘的分区表,这里的p是显示当前硬盘的分区表);
					# w 保存当前操作然后退出;
					# q 不保存退出;

					#在这块硬盘上划分一个主分区
					Command (m for help): n  #输入n回车
					Command action  #询问是创建一个扩展分区(e),还是主分区(p)
					   e   extended
					   p   primary partition (1-4)
					p      #输入p,创建一个主分区

					Partition number (1-4): 1 #输入主分区编号,因为这是块新硬盘,所以输入1

					First cylinder (1-2610, default 1): #输入起始磁柱,一般默认回车就可以

					#输入这个新的分区的大小,单位可以是K,M,G,本例输入+1000M,加号不能省略
					Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +1000M

					Command (m for help): p   #查看一下当前分区表

					#刚才创建的分区已经显示出来了
					Device    Boot  Start    End     Blocks    Id  System
					/dev/sdb1         1      128     1028128+  83  Linux

					Command (m for help): w
					#保存分区操作退出,如果觉得前面的操作不满意,不想保存退出,可以输入q不保存退出
					

c.使用fdisk改变分区文件系统类型

改变分区文件系统类型:

					#再次进入这块硬盘的命令模式
					[root@localhost ~]# sudo fdisk /dev/sdb

					Command (m for help): l #输入l查看当前可用的文件系统类型
					...
					 6  FAT16
					 7  HPFS/NTFS
					#fdisk是支持NTFS文件系统的,下面就将刚才的主分区改成这个文件系统

					Command (m for help): t  #输入t

					#输入要改变的分区号,因为没有其他分区了,默认自动输入了1
					Selected partition 1
					Hex code (type L to list codes): 7   #改变成7,即NTFS文件系统
					Changed system type of partition 1 to 7 (HPFS/NTFS)

					Command (m for help): p #查看一下,ID变成了7

					Device    Boot  Start   End    Blocks   Id  System
					/dev/sdb1        1      128  1028128+   7  HPFS/NTFS

					Command (m for help): w #保存退出
					

d.使用fdisk创建扩展分区

下面这个实例演示如何新建一个扩展分区,并且在扩展分区上面再划分出逻辑分区:

					[root@localhost ~]# sudo fdisk /dev/sdb

					Command (m for help): n
					Command action
					   e   extended
					   p   primary partition (1-4)
					e       #输入e,创建扩展分区
					Partition number (1-4): 1  #输入扩展分区号,故意输入1,提示1已经使用
					Partition 1 is already defined.  Delete it before re-adding it.

					Command (m for help): n
					Command action
					   e   extended
					   p   primary partition (1-4)
					e
					Partition number (1-4): 2  #输入分区号2
					First cylinder (129-2610, default 129): #默认起始磁柱,回车
					Using default value 129

					#输入这个扩展分区的大小,本例划分2G
					Last cylinder, +cylinders or +size{K,M,G} (129-2610, default 2610): +2G

					Command (m for help): p #查看当前分区表

					 Device   Boot  Start  End   Blocks    Id  System
					/dev/sdb1         1    128   1028128+   7  HPFS/NTFS
					/dev/sdb2        129   390   2104515    5  Extended

					Command (m for help): n  #在此基础上再新建分区
					Command action
					   l   logical (5 or over) #只要已经存在扩展分区,就会出现逻辑分区选项
					   p   primary partition (1-4)
					l      #输入l,在这个扩展分区上创建一个逻辑分区
					First cylinder (129-390, default 129): #回车
					Using default value 129

					#划分1G给这个逻辑分区
					Last cylinder, +cylinders or +size{K,M,G} (129-390, default 390): +1G

					Command (m for help): p #查看一下
					Device    Boot   Start   End   Blocks   Id  System
					/dev/sdb1          1     128  1028128+   7  HPFS/NTFS
					/dev/sdb2        129     390  2104515    5  Extended
					/dev/sdb5        129     260  1060258+  83  Linux

					#在第一部分已经详细讲解过,一个扩展分区也占用一个主分区号,逻辑分区的分区号是从5开始的(因为主分区号的范围是1~4,就算没有那么多主分区,分区号也会保留着)
					Command (m for help): w #保存退出
					

e.使用fdisk删除分区

					[root@localhost ~]# sudo fdisk /dev/sdb

					Command (m for help): d  #输入d回车
					Partition number (1-5): 5 #输入要删除的分区号

					Command (m for help): p  #逻辑分区已经被删除了

					Device    Boot Start  End   Blocks   Id  System
					/dev/sdb1       1     128  1028128+   7  HPFS/NTFS
					/dev/sdb2      129    390  2104515    5  Extended

					Command (m for help): q
					#这里我不保存刚才的删除分区操作,因为等下要用来演示格式化操作
					

分区完成后就可以对分区进行格式化操作了,只有被格式化之后,这个分区才能被挂载使用,格式化前必须重启系统,新建的分区才能被识别(不同的系统可能不一样,一部分Linux发行版分区完成后直接就能格式化无需重启)。

0×3.使用mkfs格式化分区

					#在CentOS中mkfs所支持的文件系统类型
					[root@localhost ~]# sudo mkfs.#在这个.后面连续按两下tab键,下面就是支持的格式化类型
					mkfs.btrfs   mkfs.ext2    mkfs.ext4    mkfs.minix   mkfs.vfat    
					mkfs.cramfs  mkfs.ext3    mkfs.fat     mkfs.msdos   mkfs.xfs

					#将/dev/sdb5格式化成ext4文件系统
					[root@localhost ~]# sudo mkfs.ext4 /dev/sdb5
					

0×4.使用mount挂载分区

使用下面的命令,将/dev/sdb5挂载到/home/qing/sdb5:

					#在自己的家目录创建一个文件夹sdb5
					qing@qingsword.com:~$  mkdir ~/sdb5 

					#将/dev/sdb5分区挂载到刚才创建的文件夹中
					qing@qingsword.com:~$  sudo mount /dev/sdb5 ~/sdb5

					#因为挂载操作是root权限的,所以挂载后sdb5目录会变成只有root才能读写,当前用户需要读写请使用下面的命令将这个目录的用户和组都改为当前用户,将qing替换成你自己的用户名
					qing@qingsword.com:~$  sudo chown -R qing:qing ~/sdb5

					#如果不需要使用了,可以使用下面的命令取消挂载
					qing@qingsword.com:~$  sudo umount ~/sdb5
					

挂载完成后,对目录~/sdb5的读写操作实际上就是直接读写的/dev/sdb5这个逻辑分区,但系统重启后,挂载会失效,可以使用下面的方法来让系统自动挂载。

a.编辑/etc/fstab文件实现自动挂载

					#使用gedit编辑器打开这个文件
					qing@qingsword.com:~$  sudo gedit /etc/fstab
					#在已有内容的后面新起一行,写入下面了内容;
					#第一个参数为你要挂载的分区(/dev/sdb5);
					#第二个参数为挂载的位置(/sdb5文件夹必须存在);
					#第三个参数是分区文件类型(ext4),格式化的时候的那个类型,后面的参数默认即可;
					/dev/sdb5   /home/qing/sdb5  ext4   defaults    0  0

					#保存退出,这样每次系统重启都会自动将/dev/sdb5分区挂载到/home/qing/sdb5目录中了
					

0×5.创建SWAP分区

现在假设我们系统没有分配SWAP交换分区,而后我们想添加一个SWAP分区(或者扩充现有的SWAP分区大小),可以先使用fdisk从空余磁盘中取出一部分空间,然后激活成SWAP分区,请看下面的实例:

					#分区的步骤这里就不给出了,只是要注意在分区时使用
					t参数将分区类型替换成82交换分区,假设我分了一个/dev/sdb1分区大小是5G,下面将这个分区的类型改成Linux swap
					....省略分区步骤....
					Command (m for help): t
					Selected partition 1
					Hex code (type L to list all codes): 82
					Changed type of partition 'Linux' to 'Linux swap / Solaris'
					Command (m for help): w
					The partition table has been altered!

					#使用mkswap将分区格式化成SWAP分区
					[root@qingsword.com:~]# mkswap /dev/sdb1

					#现在系统中的swap分区大小是0
					[root@qingsword.com:~]# free -h
					             total       used       free     shared    buffers     cached
					Mem:          1.8G       1.0G       770M       9.7M       1.2M       360M
					-/+ buffers/cache:       695M       1.1G
					Swap:           0B         0B         0B

					#使用swapon让上面格式化后的swap分区起作用
					[root@qingsword.com:~]# swapon /dev/sdb1

					#再次查看,swap分区的大小变成了5G
					[root@qingsword.com:~]# free -h
					             total       used       free     shared    buffers     cached
					Mem:          1.8G       1.0G       765M       9.7M       1.2M       360M
					-/+ buffers/cache:       699M       1.1G
					Swap:         5.0G         0B       5.0G

					#最后,如果想要让swap分区开机挂载使用,需要将下面这一句信息写入/etc/fstab文件中
					/dev/sdb1 swap swap defaults 0 0