Linux之磁盘管理

Posted 锦衣admin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux之磁盘管理相关的知识,希望对你有一定的参考价值。

理论储备

系统硬件知识之硬盘

硬盘的基本知识

硬盘:用于存储数据的存储介质,硬盘也叫磁盘

硬盘接口:硬盘接口是硬盘与主机系统间的连接部件,作用是在硬盘缓存和主机内存之间传输数据,不同的硬盘接口决定硬盘与计算机之间的连接速度,在整个系统中,硬盘接口的优劣直接影响着程序运行快慢和系统性能好坏。

pc机和服务器硬盘接口区别:

  1. 个人pc机:IDE接口 ——> SATA I/II/III (接口版本越高,读写速率越快)

  2. 服务器上:SCSI接口 ——> SAS接口 (SAS是新一代的SCSI技术,可兼容SATA硬盘)

硬盘命名方式:

  • /dev/sd* :物理硬盘安装在服务器上的命名方式
  • /dev/vd* :云计算中的硬盘命名方式,因为使用了红帽公司的kvm技术
OSIDE(并口)SATA(串口)SCSI
RHEL5/dev/hda/dev/sda/dev/sda
RHEL6/dev/sda/dev/sda/dev/sda
RHEL7/dev/sda/dev/sda/dev/sda

磁盘设备的命名:

  • 如果是本机的第一块硬盘,硬盘命名:/dev/sda 或 /dev/vda

  • 如果是本机的第二块硬盘,硬盘命名:/dev/sdb或/dev/vdb

如:/dev/sda2

s=硬件接口类型(sata/scsi),d=disk(硬盘),a=第1块硬盘(b,第二块),2=第几个分区

  1. /dev/hd h=IDE硬盘 => /dev/hdd3: 表示IDE硬盘的第四块硬盘的第三个分区

  2. /dev/vd v=虚拟硬盘 => /dev/vdf7: 标识虚拟硬盘的第五块硬盘的第七个分区

HP服务器硬盘:

如:/dev/cciss/c0d0

  1. /dev/cciss/c0d0p1 => c0第一个控制器, d0第一块磁盘, p1分区1

  2. /dev/cciss/c0d0p2 => c0第一个控制器, d0第一块磁盘, p2分区2

硬盘的分区方式:MBR和GPT

为什么要对硬盘进行分区?

  • 需要合理使用硬盘,用不同的分区储存不同的文件

硬盘寻址

基本分区管理

磁盘划分思路:

  • 进入分区表 新建分区 fdisk /dev/sdb
  • 更新分区表<刷新分区表>
  • 格式化分区——>文件系统 mkfs.ext4 /dev/sdb1
  • 挂载使用——>mount【开机自动挂载 | autofs自动挂载】

MBR分区方案

MBR分区特点:

  • 只能对小于2TB的硬盘进行分区划分(MBR分区也叫DPT分区也叫MSDOS分区)

  • 最多划分4个主分区

分区方案:

  • 4个主要分区

  • 1个主要分区1个扩展分区,再划分逻辑分区

  • 2个主要分区1个护展分区,再划分逻辑分区

  • 3个主要分区1个扩展分区,再划分逻辑分区

  • 1个扩展分区,再划分逻辑分区(操作系统只能安装在主分区上)

添加一块小于2TB硬盘

当添加一块硬盘后需要对硬盘进行分区(需要关机操作)
在这里插入图片描述

第一步:fdisk命令[新建分区]

  • 对硬盘进行分区
  • fdisk命令用于MBR分区方案
  • 分区前需要确认硬盘是否存在数据

fdisk命令选项说明:

# lsblk		=>	查看系统设备挂载情况
# df -h 	=>	查看系统已经挂载的设备情况

# fsidk [选项]
选项说明:
	-l:查看当前系统的所有设备分区情况
		如:fdisk -l /dec/sdb =>	就是列出这个设备的分区情况
	设备名称:如 fdisk /dev/sdb,就是对这个设备进行分区


# fdisk 设备名称
选项说明:
	Command(m for help): m      			=>	输出帮助信息
	Commandaction
   a  toggle a bootable flag  				=>	设置启动分区
   b  edit bsd disklabel      				=>	编辑分区标签
   c  toggle the dos compatibility flag		=>	切换dos兼容性标志
   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  	=>	创建一个新的空白DOS分区表
   p  print the partition table             =>	打印分区表
   q  quit without saving changes           =>	退出不保存设置
   s   createa new empty Sun disklabel		=>	创建一个新的空的SUN标示
   t   changea partition's system id        =>	改变分区的类型
   u   changedisplay/entry units            =>	改变显示的单位
   v   verifythe partition table            =>	检查验证分区表
   w  write table to disk and exit          =>	保存分区表
   x   extra functionality (experts only)

fdisk -l 命令详解:

# fdisk -l
[root@lamp ~]# fdisk -l

Disk /dev/sda: 32.2 GB, 32212254720 bytes, 62914560 sectors		=>	 /dev/sda 目录下分区情况
Units = sectors of 1 * 512 = 512 bytes						=>	 单元
Sector size (logical/physical): 512 bytes / 512 bytes		=>	扇区大小(逻辑/物理)  都是512字节
I/O size (minimum/optimal): 512 bytes / 512 bytes			=>	I/O 大小(最小/最大) 都是512字节	
Disk label type: dos			=>	磁盘标签类型:dos,即分区类型为MSDOS(MBR)分区
Disk identifier: 0x000a316c		=>	设备识别码

#L	启动设备加*		起始 		 结束 		块		id	系统
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    41943039    19921920   8e  Linux LVM

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 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


Disk /dev/mapper/centos-root: 18.2 GB, 18249416704 bytes, 35643392 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


Disk /dev/mapper/centos-swap: 2147 MB, 2147483648 bytes, 4194304 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


备注:CentOS 6 中可能还会有:下面一列选项
	 255 heads, 63 sectors/track, 3263 cylinders
 	 255磁头    63个扇区 每 磁道   3263个圆柱体

对新加硬盘/dev/sdb创建分区:

# fdisk /dev/sdb		=>	使用fdisk 设备名称创建分区
[root@lamp ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x5583886d.

Command (m for help): n		=>	"n:代表新建分区"
Partition type:
   p   primary (0 primary, 0 extended, 4 free)		=>	"p:为新建主分区,编号只能分1-4主分区"
   e   extended				=>	"e:为新建扩展分区"


Select (default p): 1		=>	"1:代表新建主分区的编号为1"


First sector (2048-20971519, default 2048): 	=>	"直接回车,默认选择启始扇区,系统会自己创建"
Using default value 2048


Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +2G	=>	"+2G:代表创建的1号主分区为2G大小"
Partition 1 of type Linux and of size 2 GiB is set


Command (m for help): p			=>	"p:打印分区表"

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 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
Disk label type: dos
Disk identifier: 0x5583886d

#l	设备名称			启始扇区		  结束扇区	块大小		
   Device Boot      Start         End      Blocks   Id  System		=>	"分区表信息,创建了编号1的主分区"
/dev/sdb1            2048     4196351     2097152   83  Linux
后面以此类推....




#l 删除分区
Command (m for help): d		=>	"d:代表删除分区"

Partition number (1-4, default 4): 1	=>	"1:代表删除分区的编号,可选选项1-4,因为我创建了4个分区"
Partition 1 is deleted
现在已经删除了1号分区




#l 创建扩展分区
Command (m for help): n	=>	"n:代表新建分区"
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended


Select (default e): e	=>	"创建扩展分区,因为创建了三个主分区,现在扩展分区改为了扩展分区。但是也可以继续创建主分区"
Using default response e


Selected partition 4	=>	"现在只剩编号4了所以默认"
First sector (10487810-20971519, default 10489856): 
Using default value 10489856


Last sector, +sectors or +size{K,M,G} (10489856-20971519, default 20971519): 	=>	"注意:现在默认回车就是把剩下的容量全部给扩展分区,当然也可以自己给,但是会造成硬盘使用不充分浪费了为分配的容量"
Using default value 20971519
Partition 4 of type Extended and of size 5 GiB is set



Command (m for help): p			=>	"p:打印分区表"

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 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
Disk label type: dos
Disk identifier: 0x5583886d

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux
/dev/sdb2         4196352    10487807     3145728   83  Linux
/dev/sdb3        10487808    10487809           1   83  Linux
/dev/sdb4        10489856    20971519     5240832    5  Extended	=>	扩展分区




#l 在扩展分区下创建逻辑分区,注意:逻辑分区的容量大小是从扩展分区获取的,所有逻辑分区的总大小不超过扩展分区总大小
Command (m for help): n		=>	"n:新建分区"
Partition type:
   p   primary (2 primary, 1 extended, 1 free)		=>	"p:代表创建扩展分区还是主分区"
   l   logical (numbered from 5)					=>	"l:代表创建逻辑分区"


Select (default p): l				=>	"l:代表创建扩展分区"
Adding logical partition 5


First sector (10491904-20971519, default 10491904): 	=>	"直接回车,启始扇区选项让系统默认创建"
Using default value 10491904


Last sector, +sectors or +size{K,M,G} (10491904-20971519, default 20971519): +1G	=>	"+1G:代表创建逻辑分区大小为1G"
Partition 5 of type Linux and of size 1 GiB is set


Command (m for help): p			=>	"p:打印分区表"

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 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
Disk label type: dos
Disk identifier: 0x5583886d

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb2         4196352    10487807     3145728   83  Linux
/dev/sdb3        10487808    10487809           1   83  Linux		=>	"这个是在+1G选项时,我写的+1造成的"
/dev/sdb4        10489856    20971519     5240832    5  Extended
/dev/sdb5        10491904    12589055     1048576   83  Linux		=>	"创建的逻辑分区编号是从5开始的,删除这个逻辑分区时,直接d => 5"


#l 最后最后,
Command (m for help): w		=>	"w:保存退去"
Command (m for help): q		=>	"1:不保存退出"

fdisk分区注意:

  • 最多只能创建4个主分区,扩展分区编号(1-4),逻辑分区编号从5开始

  • 删除分区时建议从后面的编号开始删除,假设你跳着删除了2号分区,然后重新创建2号分区,那么新创建2号分区的大小只能是你之前删除的2号分区大小 。因为1号和3号分区截断了硬盘中扇区(柱面)的划分

  • 逻辑分区总大小不能超过扩展分区,因为其是从扩展分区中取得容量,且逻辑分区是不能挂载使用的。

  • 扩删除展分区就是删除这个扩展分区下所有逻辑分区

  • 不创建主分区,直接创建一个扩展分区也是可以的,如果扩展分区占满了硬盘容量那么就无法再创建主分区,也就是说这个硬盘只有一个扩展分区

  • 当删除分区时,需要将分区数据进行备份,否则数据丢失。

  • 如果分区删除后,数据没有进行备份,需要特殊技术才能恢复数据,注意:这时硬盘不能写入数据否则数据无法恢复

第二步:parts命令[刷新分区]

  • 当分区文件没有被内核识别出来,需要使用命令进行探测

  • 告诉内核去识别、登记某个硬盘上的分区信息。并不是加载,只是识别并记录而已

# partx  [选项]	设备名称
选项说明:
	-a:登记某块盘上的所有分区信息,如果某个分区信息已有记录,就会报错:
	-d: 删除内核中关于某磁盘上的所有分区的记录(不是卸载)
			-d --nr m-n 删除从第m--n分区的记录,如果已经挂载,则无法删除,并报错:
			如果都删除了,使用-a选项来重新登记,不会有报错。

#l fdisk分区完后,让内核识别分区信息
# partx -a /dev/sdb		=>	让内核识别分区信息,如果内核已经识别到会报错(报错无关紧要)
	partx: /dev/sdb: error adding partitions 1-6


或者使用"partprobe"命令刷新分区:
	# partprobe /dev/sdb


使用ls /dev/sdb*命令查看分区信息:
	# ls /dev/sdb*		=>	当出现以下内容时证明该硬盘的分区可以格式化
		[root@node3 ~]# ls /dev/sdb*
		/dev/sdb  /dev/sdb1  /dev/sdb2  /dev/sdb3  /dev/sdb5  /dev/sdb6

刷新分区注意事项:

  • 分区完后需要手动刷新分区表,如果刷新不成功,有可能是设备正在挂载,解挂后再刷新,还不成功就重启系统

第三步:mkfs命令[分区格式化]

需要给分区设置文件系统类型

格式化定义:按照一定的文件系统,对硬盘分区进行存储数据

  • Linux常见文件系统:ext3、ext4、xfs

  • vfat文件系统为Windows中的fat32文件系统

ext与xfs文件系统比较与总结
ext2-4 文件系统
fat 文件系统
Minix文件系统

#l 查看当前系统支持哪些文件系统命令
# mkfs.		=>	按两次tab键
	[root@lamp ~]# mkfs.
	mkfs.btrfs   mkfs.cramfs  mkfs.ext2    mkfs.ext3    mkfs.ext4    mkfs.fat     mkfs.minix   mkfs.msdos   mkfs.vfat    mkfs.xfs

对分区进行格式化:

各分区格式化命令:
	# mkfs.[文件系统] 设备目录# mkfs	-t [文件系统] 设备目录 

#l 查看系统设备情况
[root@node3 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk
├─sdb1            8:17   0    2G  0 part
├─sdb2            8:18   0    3G  0 part
├─sdb3            8:19   0    1K  0 part
├─sdb5            8:21   0    3G  0 part
└─sdb6            8:22   0   12G  0 part
sr0              11:0    1 1024M  0 rom


给"/dev/sdb1"分区格式化为xfs文件系统:
	# mkfs.xfs /dev/sdb1	=>/dev/sdb1分区进行格式化,且分区文件系统为xfs"/dev/sdb2"分区格式化为ext4文件系统:
	# mkfs.ext4 /dev/sdb2	=>/dev/sdb2分区进行格式化,且分区文件系统为ext4

第四步:mount命令[挂载已格式化分区设备]

手动挂载:系统重启后需要重新挂载,手动卸载后需要手动挂载

# mount [选项 选项的值] 需要挂载的设备 挂载目录
选项说明:
	-o:挂载选项,以什么方式挂载
		ro:只读
		rw:读写
		sync:同步
		remount:重新挂载(挂载一个正在挂载设备),当前设备已经被挂载时使用
	
挂载:
	# mkdir /mnt/sdb1		=>	创建挂载目录,注意:设备分区不能挂载在同一目录下
	# mount -0 rw,sync /dev/sdb1 /mnt/sdb1
		=>	使用读写和同步的方式挂载/dev/sdb1分区

	# mkdir /mnt/sdb2		=>	创建挂载目录,注意:设备分区不能挂载在同一目录下
	# mount -0 rw,sync /dev/sdb2 /mnt/sdb2
		=>	使用读写和同步的方式挂载/dev/sdb2分区


查看挂载情况:
	# df -h
		[root@node3 rc.d]# df -h
		Filesystem               Size  Used Avail Use% Mounted on
		/dev/mapper/centos-root   17G  6.1G   11G  36% /
		devtmpfs                 894M     0  894M   0% /dev
		tmpfs                    910M     0  910M   0% /dev/shm
		tmpfs                    910M   11M  900M   2% /run
		tmpfs                    910M     0  910M   0% /sys/fs/cgroup
		/dev/sda1               1014M  179M  836M  18% /boot
		tmpfs                    182M  4.0K  182M   1% /run/user/42
		tmpfs                    182M   24K  182M   1% /run/user/1000
		tmpfs                    182M     0  182M   0% /run/user/0
		/dev/sdb1                2.0G   33M  2.0G   2% 以上是关于Linux之磁盘管理的主要内容,如果未能解决你的问题,请参考以下文章

Linux基础之磁盘管理

linux之磁盘管理

Linux系统管理之磁盘管理与文件系统

Linux入门之磁盘管理分区管理

Linux System 磁盘管理之方案二{LVM}

linux系统管理之存储管理