一、购买云硬盘并挂载

注意:云硬盘必须和实例在同一个区域!

二、检测硬盘的分区表格式

两种分区表格式:msdos(MBR)、GPT

两种分区表格式的区别:

MBR:即“主引导记录”,是位于硬盘最前端的512字节的引导代码,包括446个字节的“主引导程序”,64个字节的分区表(每个分区16个字节,共4个分区),2个字节结束标志。由于分区只由16个字节控制,所以分区的大小被限制在2TB左右。

GPT:即“全局唯一标识分区表”,被用于替代MBR分区表。

GPT分区表结构图

LBA0在不支持GPT启动的系统中,可以防止因为无法识别而删除分区的危险

在支持GPT启动的系统中,这部分存储了第一阶段用于启动的代码,还有一个标识为0xEE的分区,用以标识该硬盘使用GPT分区表

LBA1记录了分区表头,其中定义了硬盘的可用空间以及组成分区表的项的大小和数量,除此之外,还定义了诸如分区表头、备份分区表头、分区表项、备份分区表项、分区表项大小、数量、可用分区位置等等信息,一般来说,分区表项为128字节,有128个,占据32个LBA

LBA2-LBA33分区表项,记录了分区位置,属性(是否只读),分区名字

LBA-33 - LBA 2备份分区表项

LBA-1备份分区表头

使用parted -l查看硬盘的分区表格式,其中Partition Table标识分区表格式。

$parted -l

Disk Flags:

Model: Virtio Block Device (virtblk)

Disk /dev/vda: 53.7GB

Sector size (logical/physical): 512B/512B

Partition Table: msdos

Disk Flags:

Number Start End Size Type File system Flags

1 1049kB 53.7GB 53.7GB primary ext4 boot

Model: Virtio Block Device (virtblk)

Disk /dev/vdb: 10.7GB

Sector size (logical/physical): 512B/512B

Partition Table: msdos

Disk Flags:

Number Start End Size Type File system Flags

三、给硬盘分区

给分区表为MBR的硬盘进行分区。

fdisk命令详解

用法:

fdisk [options] 给硬盘分区

fdisk [options] -l 列出分区表信息

fdisk -s 显示指定分区大小

选项:

[-b] 扇区单位大小

[-c] 兼容模式

[-u] 以扇区还是柱面为单位进行显示

[-v] 显示fdisk的版本

[-C -H -S] 柱面、磁头、扇区的数量

分区命令

a 将指定主分区标记为活动分区,活动分区可以有多个,不会有影响,只是表示这个分区可能存在系统,可以从这启动

c 设置兼容性标记(废弃)

d 删除一个分区

g 创建一个新的空GPT分区表

G 创建一个IRIX(SGI)分区表

l 列出所有分区类型即对应编号

m 打印菜单(就是这个菜单)

n 创建一个新的分区

o 创建一个新的空DOS 分区表

p 打印分区表信息

q 退出但不保存

t 更改分区类型

v 检验分区表,显示还有多少未分配的空间

w 保存

x 额外功能(慎用,除非熟知效果)

分区说明

1)MBR分区格式的最多只能有4个分区,由主分区以及扩展分区共享

2)主分区至少要有一个,扩展分区最多有一个

3)逻辑分区建立在扩展分区上,数量不限

使用fdisk给硬盘分区

//主分区1、2048为第一个起始扇区,大小5G

Command (m for help): n

Partition type:

p primary (0 primary, 0 extended, 4 free)

e extended

Select (default p): p

Partition number (1-4, default 1): 1

First sector (2048-20971519, default 2048):

Using default value 2048

Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): +5G

Partition 1 of type Linux and of size 5 GiB is set

//扩展分区2

Command (m for help): n

Partition type:

p primary (1 primary, 0 extended, 3 free)

e extended

Select (default p): e

Partition number (2-4, default 2):

First sector (10487808-20971519, default 10487808):

Using default value 10487808

Last sector, +sectors or +size{K,M,G} (10487808-20971519, default 20971519):

Using default value 20971519

Partition 2 of type Extended and of size 5 GiB is set

//逻辑分区5

Command (m for help): n

Partition type:

p primary (1 primary, 1 extended, 2 free)

l logical (numbered from 5)

Select (default p): l

Adding logical partition 5

First sector (10489856-20971519, default 10489856):

Using default value 10489856

Last sector, +sectors or +size{K,M,G} (10489856-20971519, default 20971519):

Using default value 20971519

Partition 5 of type Linux and of size 5 GiB is set

//打印分区表信息

Command (m for help): p

Disk /dev/vdb: 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: 0xa799a350

Device Boot Start End Blocks Id System

/dev/vdb1 2048 10487807 5242880 83 Linux

/dev/vdb2 10487808 20971519 5241856 5 Extended

/dev/vdb5 10489856 20971519 5240832 83 Linux

//确认正确后,保存退出

Command (m for help): wq

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

给分区表为GPT的硬盘进行分区

parted命令详情

用法:parted [options] [device]

选项:

[-l] 列出所有块设备上的分区表信息

[-m] 输出简化的格式化的信息

[-v] 输出该命令的版本

[-s] 非交互,适应于脚本

[-a] 设置新分区的对齐方式,可选值:none、cylinder(按柱面对齐)、minimal(对齐到物理块的最小单元,可以发挥硬盘最大的效能)、optimal(在保证最佳性能的情况下,对齐到物理块的最小单元的倍数)

命令:

align-check [align-type] 检测指定分区是否是指定对齐方式(min、opt,可以同时满足两种对齐方式)

help 打印命令项

mklabel 转换硬盘的分区表结构(从MBR到GPT会丢失所有的数据)

mkpart 创建一个分区

name 为指定分区改名

print 打印分区表信息

quit 退出

rescue 当不小心删除了某个分区时,可以指定搜索范围,如果搜索到了残存的系统,将会恢复分区

resizepart 更改分区的结束位置

rm 删除分区

select 选择需要进行操作的设备

unit 设置显示单位,s(sector)、B、KiB(1024B)、MiB、GiB、TiB、KB(1000B)、MB、GB、TB、%、cyl(柱面)、chs、compact(自动单位)

version 版本

使用parted命令进行分区

$parted -a opt /dev/vdb

GNU Parted 3.1

Using /dev/vdb

Welcome to GNU Parted! Type 'help' to view a list of commands.

//创建一个分区,opt、min对齐,容量一半,文件系统ext4

(parted) mkpart

Partition name? []? part1

File system type? [ext2]? ext4

Start? 0%

End? 50%

//创建第二个分区,opt、min对齐,容量剩下全部,文件系统ext4

(parted) mkpart

Partition name? []? part2

File system type? [ext2]? ext4

Start? 50%

End? 100%

//打印查看结果

(parted) print

Model: Virtio Block Device (virtblk)

Disk /dev/vdb: 10.7GB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

Disk Flags:

Number Start End Size File system Name Flags

1 1049kB 5369MB 5368MB part1

2 5369MB 10.7GB 5368MB part2

额外说明:

和fdisk不一样的是,它会直接生效,没有保存项

关于标记的命令没有列出

四、格式化分区

mkfs命令用法:`mkfs -t [file-system-type] [size]

使用mkfs格式化分区

注意:是格式化分区,而不是格式化硬盘(会清空所有分区数据,改变分区表结构),MBR格式的分局fdisk列出的分区的device的名字格式化就可以了,GPT格式的在硬盘设备名后加上分区序号就是分区名了

//格式化分区part1

$mkfs -t ext4 /dev/vdb1

mke2fs 1.42.9 (28-Dec-2013)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks

327680 inodes, 1310464 blocks

65523 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=1342177280

40 block groups

32768 blocks per group, 32768 fragments per group

8192 inodes per group

Superblock backups stored on blocks:

32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done

Writing inode tables: done

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done

//格式化分区part2

$mkfs -t ext4 /dev/vdb2

mke2fs 1.42.9 (28-Dec-2013)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks

327680 inodes, 1310464 blocks

65523 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=1342177280

40 block groups

32768 blocks per group, 32768 fragments per group

8192 inodes per group

Superblock backups stored on blocks:

32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: done

Writing inode tables: done

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done

//查看格式化后的情况

$parted -l

Model: Virtio Block Device (virtblk)

Disk /dev/vdb: 10.7GB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

Disk Flags:

Number Start End Size File system Name Flags

1 1049kB 5369MB 5368MB ext4 part1

2 5369MB 10.7GB 5368MB ext4 part2

五、硬盘挂载到系统

mount命令使用详解

用法:mount [options]

选项:

[-a] 挂载所有记录在/etc/fstab的文件系统

[-l] 列出所有已经挂载的信息,与/etc/mtab中同

[-n] 不将变动写入/etc/mtab,/etc/mtab是记录所有挂载信息的文件,任何挂载的变动都会被写入该文件

[-r] 以只读方式挂载,挂在后,不可对硬盘内的数据进行修改操作

[-w] 以读写方式挂载

[-t] 设置挂载时候的文件系统类型,如果设置的类型与硬盘中的文件系统类型不一致,将会报错

[-o] 一些额外选项,某些选项即使不指定也是

async:异步模式(默认)

sync:同步模式

auto/noauto:支持自动挂载(默认)/不支持自动挂载

exec/noexec:支持将该文件系统上的应用程序应用为进程(默认)/不支持

dev/nodev:支持在该文件系统上使用设备文件(默认)/不支持

suid/nosuid:支持在该文件系统上使用特殊权限(默认)/不支持

remount:重新挂载

ro:只读模式

rw: 读写模式(默认)

user/nouser:允许普通用户挂载这个设备/不允许(默认)

acl:启用此文件系统上的acl功能

mount命令额外说明:

mount命令能够挂载的不仅仅只有硬盘,这里只列出了部分命令

如果挂载目标文件夹下不为空,则挂载后这些文件会被隐藏

查看当前挂载的设备,还可以查看/proc/mounts

使用mount命令挂载分区:

//以读写方式挂载文件系统为ext4的分区part1

$mount -t ext4 /dev/vdb1 /local/ext_disk

//以只读方式挂载文件系统为ext4的分区part2

$mount -r -t ext4 /dev/vdb2 ext_ro_disk

//查看硬盘是否挂载成功

$df -hT

Filesystem Type Size Used Avail Use% Mounted on

/dev/vda1 ext4 50G 5.2G 42G 12% /

/dev/vdb1 ext4 4.8G 20M 4.6G 1% /local/ext_disk

/dev/vdb2 ext4 4.8G 20M 4.6G 1% /local/ext_ro_disk

六、解除挂载

umount命令详解

[-a] 卸载所有文件系统

[-A] 卸载所有挂载了指定设备的挂载点

[-d] 如果卸载的是loop设备,则同使释放掉这个loop设备

使用umount卸载所有挂载了part2分区的目录

umount -A /dev/vdb2

//查看卸载结果

$df -hT

Filesystem Type Size Used Avail Use% Mounted on

/dev/vda1 ext4 50G 5.3G 42G 12% /

/dev/vdb1 ext4 4.8G 20M 4.6G 1% /local/ext_disk

LBA指的是逻辑区块地址,替代早期的CHS寻址方式,LBA以编号(从0开始)来定位区块 ↩

loop设备是一个伪设备,目的是为了像访问块设备一样访问一个带有文件系统的文件,如光盘的ISO镜像,就可以创建为loop设备,并挂载,然后就可以像块设备一样访问了

[-n] 不将更改写入/etc/mtab

[-R] 递归卸载

[-r] 如果卸载失败,则以只读方式重新挂载

[-t] 仅仅卸除指定文件系统类型的设备 ↩