Linux【6】-硬盘管理2-1-分区
一、分区的几个基本概念
1.1 磁盘的文件名
Linux 中每个硬件都被当做一个文件。
常见磁盘的文件名:
- SCSI/SATA/USB 磁盘:/dev/sd[a-p]
- IDE 磁盘:/dev/hd[a-d]
其中文件名后面的序号的确定与磁盘插入的顺序有关,而与磁盘所插入的插槽位置无关。
1.2 分区表
磁盘分区表主要有两种格式:
- 一种是限制较多的 MBR 分区表
- 一种是较新且限制较少的 GPT 分区表。
1.MBR
MBR 中,第一个扇区最重要,里面有:
- 主要开机记录(Master boot record, MBR),其中 MBR 占 446 bytes
- 分区表(partition table),,partition table 占 64 bytes。
分区表只有 64 bytes,最多只能存储 4 个分区,这 4 个分区为主分区(Primary)和扩展分区(Extended)。其中扩展分区只有一个,它将其它空间用来记录分区表,可以记录更多的分区,因此通过扩展分区可以分出更多区分,这些分区称为逻辑分区。
Linux 也把分区当成文件,分区文件的命名方式为:磁盘文件名+编号,例如 /dev/sda1。注意,逻辑分区的编号从 5 开始。
2.GPT
不同的磁盘有不同的扇区大小,例如 512bytes 和最新磁盘的 4k。GPT 为了兼容所有磁盘,在定义扇区上使用逻辑区块地址(Logical Block Address, LBA)。
GPT 第 1 个区块记录了 MBR,紧接着是 33 个区块记录分区信息,并把最后的 33 个区块用于对分区信息进行备份。
GPT 没有扩展分区概念,都是主分区,最多可以分 128 个分区。
二、查看硬盘
在硬盘装上后,在分区之前,用 fdisk –l 就可以看到这块硬盘了,fdisk –l 会输出一些有关这块硬盘的基本信息,如下所示:
[root@localhost ~]# fdisk –l 硬盘名/分区名
….#此处省略若干行
Disk /dev/sdb: 536.9 GB, 536870912000 bytes
255 heads, 63 sectors/track, 65270 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: 0x2f7e945a
…#此处省略若干行
要理解 fdisk –l 输出的关于磁盘的基本信息,我们首先需要简要了解一下机 械式磁盘(HDD)的物理构成:我们需要知道的概念包括:
- 盘片(platter):一个机械式磁盘一般由若干磁性盘片组成;
- 磁头(head):每个盘片一般有上下两面,盘片的两个面均能存储数据,因此需要两个磁头;
- 磁道(track):每个盘片沿着半径的方向可以划分为很多同心圆,这些圆圈被称为磁道(track),磁道是从盘片外圈往内圈编号 0 磁道,1 磁道…,靠近 主轴的同心圆用于停靠磁头,不存储数据;
- 扇区(sector):每个磁道被分成若干等份,每一份就被称为一个扇区,扇区是硬盘数据存储的最小单位;
- 柱面(cylinder)数:不同盘片上具有相同磁道编号的同心圆组成面就称作柱面,所以磁盘柱面数就等于磁盘单个盘片上的磁道数。柱面是硬盘分区的最小单位.因此,一个磁盘的容量 = 磁头数 ×柱面数 × 每道扇区数 × 每扇区字节数。
所以,上面这段 fdisk –l 输出就是告诉我们:这个名为/dev/sdb 的磁盘容量 总共为 536870912000 字节(536.9 GB),磁盘有 255 个磁头,每个磁道有 63 个扇区,总共有 65270 个柱面(磁道)。其中每个扇区容量为 512 字节(这个磁 盘的最小逻辑和物理单元,也是这个磁盘的读写的最小单元), 因此每个柱面的 容量为 255×63×512 字节=8225280 字节。
当然在对磁盘进行分区( Partition )前,磁盘是无法用来存储数据的。事实上, 对磁盘进行分区的作用就是告诉操作系统磁盘可存储数据的区域,也即每个分区 的起始柱面和结束柱面。这些分区信息都包括在一个叫做分区表(Partition Table) 的数据结构中。
分区表是一块磁盘中最重要的数据,分区表一般存储在磁盘的 0 磁道上面 (所以当一个硬盘的 0 磁道发生了物理损坏的时,这个硬盘就基本宣告寿终正 寝了),硬盘仅仅为分区表保留了 64 个字节的存储空间,而每个分区的参数占据 16 个字节,故主引导扇区中总计可以存储 4 个分区的数据,,这就是主分区 (Primary)+扩展分区(Extended) 最多只能有四个的原因了。
注意要查询一下自己的硬盘格式,用
df -T
三、分区和格式化硬盘
3.1 fdisk
见后续内容
3.2 parted
见后续内容
四、分个大于2T的硬盘
如果一个大于2T的硬盘分区的话,会提示如下的错误:
# fdisk /dev/sdb
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: The size of this disk is 5.9 TB (5908688535552 bytes).
DOS partition table format can not be used on drives for volumes
larger than (2199023255040 bytes) for 512-byte sectors. Use parted(1) and GUID
partition table format (GPT).
那如何来划分出1个大于2T的分区呢?
4.1 创建2T的分区
fdisk /dev/sdb1
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-718357, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-267349, default 267349):
Using default value 267349
这样,2T的分区就被建立了
Command (m for help): p
Disk /dev/sdb: 5908.7 GB, 5908688535552 bytes
255 heads, 63 sectors/track, 718357 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: 0x3dffd626
Device Boot Start End Blocks Id System
/dev/sdb1 1 267349 2147480811 83 Linux
4.2 建立gpt的分区表
GPT stands for GUID partition table format (GPT).
parted /dev/sdb
GNU Parted 2.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Error: /dev/sdb: unrecognised disk label
(parted) mklabel gpt
(parted) print
Model: Unknown (unknown)
Disk /dev/sdb: 5909GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
parted /dev/sdb
(parted) mkpart primary 0GB 5909GB
(parted) print
Model: Unknown (unknown)
Disk /dev/sdb: 5909GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 5909GB 5909GB primary
然后查看,fdisk分区的一个状态:
# fdisk /dev/sdb
Command (m for help): print
Disk /dev/sdb: 5908.7 GB, 5908688535552 bytes
255 heads, 63 sectors/track, 718357 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
Device Boot Start End Blocks Id System
/dev/sdb1 1 267350 2147483647+ ee GPT
4.3 初始化
mkfs.xfs /dev/sdb
3.4 挂载
见下文
五、调整分区大小
/root的分区过小,/home分区多大,需要调整一下(/home的数据需要备份,不然会丢失哦)
[root@g01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 50G 49G 1.4G 98% /
devtmpfs 504G 0 504G 0% /dev
tmpfs 504G 40K 504G 1% /dev/shm
tmpfs 504G 140M 504G 1% /run
tmpfs 504G 0 504G 0% /sys/fs/cgroup
/dev/sda1 1014M 212M 803M 21% /boot
/dev/mapper/centos-home 1.7T 2.9G 1.7T 1% /home
tmpfs 101G 12K 101G 1% /run/user/42
2.***1:/test 52T 26T 27T 49% /mnt/nfs
tmpfs 101G 0 101G 0% /run/user/1201
tmpfs 101G 0 101G 0% /run/user/1344
关闭/home上面的运行程序
例如mysql等
systemctl stop mysql
备份/home的文件,重新分区home,home文件会丢失
tar -czvf /home/home.tgz -C /home .
#test the backup
tar -tvf /home/home.tgz
#copy /home/home.tgz to other PC
解除挂载
unmount home
umount /dev/mapper/centos-home
如果显示/home正忙,且不在/home目录下,说明/home下有进程正在使用,用
fuser -m -v -i -k /home
杀死/home下的进程,再解除挂载点。但是fuser在centos7里面不是默认安装的,需要
yum install psmisc
来安装这个包。
接着解除挂载和去掉centos-home逻辑分区
umount /home
lvremove /dev/mapper/centos-home
扩展/root所在的lv,增加700G :
lvextend -L +710G /dev/mapper/centos-root
扩展/root文件系统
xfs_growfs /dev/mapper/centos-root
接着查看
[root@g01 ~]# vgdisplay
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 7
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <1.75 TiB
PE Size 4.00 MiB
Total PE 457463
Alloc PE / Size 195584 / 764.00 GiB
Free PE / Size 261879 / 1022.96 GiB
VG UUID ZTeJi0-eWrr-ctyy-2J7t-igAu-Ba2V-2uDOgL
重新创建home lv 分区的大小,根据 vgdisplay 中的free PE 的大小确定
lvcreate -L 1022G -n home centos
创建文件系统:
mkfs.xfs /dev/centos/home
挂载 home:
mount /dev/centos/home /home
复原刚才备份的文件
tar -xzvf /root/home.tgz -C /home
check /etc/fstab for any mapping of /home volume. IF it is using UUID you should update the UUID portion. (Since we created a new volume, UUID has changed)
参考资料
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn