一、购买云硬盘并挂载
- 注意:云硬盘必须和实例在同一个区域!
二、检测硬盘的分区表格式
- 两种分区表格式:msdos(MBR)、GPT
- 两种分区表格式的区别:
MBR:即“主引导记录”,是位于硬盘最前端的512字节的引导代码,包括446个字节的“主引导程序”,64个字节的分区表(每个分区16个字节,共4个分区),2个字节结束标志。由于分区只由16个字节控制,所以分区的大小被限制在2TB左右。
-
GPT:即“全局唯一标识分区表”,被用于替代MBR分区表。
- LBA0[1]存储了为了兼容性考虑而放置的传统MBR分区表,这样做有以下几个优点:
- 在不支持GPT启动的系统中,可以防止因为无法识别而删除分区的危险
- 在支持GPT启动的系统中,这部分存储了第一阶段用于启动的代码,还有一个标识为0xEE的分区,用以标识该硬盘使用GPT分区表
- LBA1记录了分区表头,其中定义了硬盘的可用空间以及组成分区表的项的大小和数量,除此之外,还定义了诸如分区表头、备份分区表头、分区表项、备份分区表项、分区表项大小、数量、可用分区位置等等信息,一般来说,分区表项为128字节,有128个,占据32个LBA
- LBA2-LBA33分区表项,记录了分区位置,属性(是否只读),分区名字
- LBA-33 - LBA 2备份分区表项
- LBA-1备份分区表头
- LBA0[1]存储了为了兼容性考虑而放置的传统MBR分区表,这样做有以下几个优点:
- 使用
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] <disk> 给硬盘分区
- fdisk [options] -l <disk> 列出分区表信息
- fdisk -s <partition> 显示指定分区大小
- 选项:
[-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.
- fdisk命令详解
- 给分区表为GPT的硬盘进行分区
- parted命令详情
- 用法:parted [options] [device]
- 选项:
[-l] 列出所有块设备上的分区表信息
[-m] 输出简化的格式化的信息
[-v] 输出该命令的版本
[-s] 非交互,适应于脚本
[-a] 设置新分区的对齐方式,可选值:none、cylinder(按柱面对齐)、minimal(对齐到物理块的最小单元,可以发挥硬盘最大的效能)、optimal(在保证最佳性能的情况下,对齐到物理块的最小单元的倍数) - 命令:
align-check [align-type] <partition-number> 检测指定分区是否是指定对齐方式(min、opt,可以同时满足两种对齐方式)
help 打印命令项
mklabel <label-type> 转换硬盘的分区表结构(从MBR到GPT会丢失所有的数据)
mkpart <part-name> <start> <end> 创建一个分区
name <partition-number> <name> 为指定分区改名
print 打印分区表信息
quit 退出
rescue <start> <end> 当不小心删除了某个分区时,可以指定搜索范围,如果搜索到了残存的系统,将会恢复分区
resizepart <partition-number> <end> 更改分区的结束位置
rm <partition-number> 删除分区
select <device> 选择需要进行操作的设备
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不一样的是,它会直接生效,没有保存项
- 关于标记的命令没有列出
- 如何对齐到最优性能(opt):
- 使用%来分配空间,使用%将会自动对齐到sector并保证最优性能
- 计算法:How to align partitions for best performance using parted
- parted命令详情
四、格式化分区
- mkfs命令用法:`mkfs -t [file-system-type] <device> [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] <source> <directory>
- 选项:
[-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设备[2] - 使用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
参考文档:
[1.Linux硬盘管理——MBR 与 GPT]
[2.Parted User’s Manual]
[3.How to align partitions for best performance using parted]
[4.Linux中挂载详解以及mount命令用法]