设备文件
在linux中一切皆文件,如果想要操作硬盘等I/O设备,必须要通过系统调用(open(),read(),write(),close())来告诉内核去打开、读、写和关闭文件。设备文件的作用就是关联至一个设备驱动程序,进而能够跟与之对应的硬件设备进行通信
设备类型
块设备:block,存取单位为块,磁盘
字符设备:char,存取单位为字符,键盘
设备号码
主设备号:major number,标识设备类型
次设备号:minor number,标识同一类型下的不同设备
mknod
创建设备文件,语法:mknod [OPTION]... NAME TYPE [MAJOR MINOR],常用选项:
- -m MODE:创建后的设备文件的访问权限
磁盘寻址
CHS
cylinder:柱面,head:磁头,sector:扇区,512bytes,track:磁道
采用24bit位寻址
其中前10位表示cylinder,中间8位表示head,后面6位表示sector、
最大寻址空间为:224*512/10243=8GB
LBA
采用48位寻址
通过转换成CHS格式完成磁盘具体寻址
最大寻址空间:248*512/10245=128PB
由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容量小于大概8GB时,可以使用CHS寻址方式或是LBA寻址方式;在磁盘容量大于大概8GB时,则只能使用LBA寻址方式
磁盘分区
分区原因
优化I/O性能
实现磁盘空间配额限制
提高修复速度
隔离系统和程序
安装多个OS
采用不同文件系统
分区方式
MBR
MBR.jpg最大寻址空间为:232*512/10244=2TB
传统BIOS运行流程:开机→BIOS初始化→BIOS自检→引导操作系统→进入系统
[root@centos6 ~]# hexdump -C -n 512 -v /dev/sda
00000000 eb 48 90 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0 |.H..............|
00000010 fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00 |...|.........!..|
00000020 00 be be 07 38 04 75 0b 83 c6 10 81 fe fe 07 75 |....8.u........u|
00000030 f3 eb 16 b4 02 b0 01 bb 00 7c b2 80 8a 74 03 02 |.........|...t..|
00000040 80 00 00 80 fe 89 04 00 00 08 fa 90 90 f6 c2 80 |................|
00000050 75 02 b2 80 ea 59 7c 00 00 31 c0 8e d8 8e d0 bc |u....Y|..1......|
00000060 00 20 fb a0 40 7c 3c ff 74 02 88 c2 52 f6 c2 80 |. ..@|<.t...R...|
00000070 74 54 b4 41 bb aa 55 cd 13 5a 52 72 49 81 fb 55 |tT.A..U..ZRrI..U|
00000080 aa 75 43 a0 41 7c 84 c0 75 05 83 e1 01 74 37 66 |.uC.A|..u....t7f|
00000090 8b 4c 10 be 05 7c c6 44 ff 01 66 8b 1e 44 7c c7 |.L...|.D..f..D|.|
000000a0 04 10 00 c7 44 02 01 00 66 89 5c 08 c7 44 06 00 |....D...f.\..D..|
000000b0 70 66 31 c0 89 44 04 66 89 44 0c b4 42 cd 13 72 |pf1..D.f.D..B..r|
000000c0 05 bb 00 70 eb 7d b4 08 cd 13 73 0a f6 c2 80 0f |...p.}....s.....|
000000d0 84 f0 00 e9 8d 00 be 05 7c c6 44 ff 00 66 31 c0 |........|.D..f1.|
000000e0 88 f0 40 66 89 44 04 31 d2 88 ca c1 e2 02 88 e8 |..@f.D.1........|
000000f0 88 f4 40 89 44 08 31 c0 88 d0 c0 e8 02 66 89 04 |..@.D.1......f..|
00000100 66 a1 44 7c 66 31 d2 66 f7 34 88 54 0a 66 31 d2 |f.D|f1.f.4.T.f1.|
00000110 66 f7 74 04 88 54 0b 89 44 0c 3b 44 08 7d 3c 8a |f.t..T..D.;D.}<.|
00000120 54 0d c0 e2 06 8a 4c 0a fe c1 08 d1 8a 6c 0c 5a |T.....L......l.Z|
00000130 8a 74 0b bb 00 70 8e c3 31 db b8 01 02 cd 13 72 |.t...p..1......r|
00000140 2a 8c c3 8e 06 48 7c 60 1e b9 00 01 8e db 31 f6 |*....H|`......1.|
00000150 31 ff fc f3 a5 1f 61 ff 26 42 7c be 7f 7d e8 40 |1.....a.&B|..}.@|
00000160 00 eb 0e be 84 7d e8 38 00 eb 06 be 8e 7d e8 30 |.....}.8.....}.0|
00000170 00 be 93 7d e8 2a 00 eb fe 47 52 55 42 20 00 47 |...}.*...GRUB .G|
00000180 65 6f 6d 00 48 61 72 64 20 44 69 73 6b 00 52 65 |eom.Hard Disk.Re|
00000190 61 64 00 20 45 72 72 6f 72 00 bb 01 00 b4 0e cd |ad. Error.......|
000001a0 10 ac 3c 00 75 f4 c3 00 00 00 00 00 00 00 00 00 |..<.u...........|
000001b0 00 00 00 00 00 00 00 00 a2 d6 02 00 00 00 80 20 |............... |
000001c0 21 00 83 5e 38 26 00 08 00 00 00 60 09 00 00 5e |!..^8&.....`...^|
000001d0 39 26 83 fe ff ff 00 68 09 00 00 00 80 02 00 fe |9&.....h........|
000001e0 ff ff 83 fe ff ff 00 68 89 02 00 00 40 01 00 fe |.......h....@...|
000001f0 ff ff 05 fe ff ff 00 68 c9 03 00 98 36 0b 55 aa |.......h....6.U.|
00000200
GPT
GPT:支持128个分区,使用64位,支持8Z(512Byte/block )64Z (4096Byte/block)
使用128位UUID(Universally Unique Identifier) 表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC校验位
UEFI (统一扩展固件接口)硬件支持GPT,使操作系统启动
UEFI运行流程:开机→UEFI初始化→引导操作系统→进入系统
管理分区
lsblk:列出块设备
fdisk:创建MBR分区
gdisk:创建GPT分区
parted:高级分区操作
partprobe:重读设置内存中的内核分区表
parted
这个工具既可以做MBR的分区,又可以做GPT的分区,主要时候用来做GPT的,
parted -l device:查看所有硬盘分区表
分区步骤
-
进入分区模式,查看帮助
[root@centos7 app]# parted /dev/sdb GNU Parted 3.1 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) help
-
创建分区表
(parted) mklabel gpt Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue? Yes/No? y
-
创建分区,创建完成就生效
(parted) mkpart Partition name? []? File system type? [ext2]? Start? 1 End? 2G
-
再创建一个分区
(parted) mkpart Partition name? []? File system type? [ext2]? Start? 2G End? 4G
-
退出
(parted) quit Information: You may need to update /etc/fstab.
fdisk
支持msdos,在centos7中也支持gpt(不建议使用)
fdisk -l device:查看所有硬盘分区表
分区操作
-
进入分区模式,查看帮助
[root@centos7 app]# fdisk /dev/sdb Command (m for help): m
-
新建分区表
Command (m for help): o
-
新建分区
Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): Using default response p Partition number (1-4, default 1): First sector (2048-41943039, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +2G Partition 1 of type Linux and of size 2 GiB is set
-
再新建两个分区
-
新建第四个分区的时候,因为mbr分区只有4个分区,只能新建扩展分区(请把剩余空间都分给扩展分区),往后还可以新建分区,只不过都是逻辑分区
Command (m for help): n Partition type: p primary (3 primary, 0 extended, 1 free) e extended Select (default e): Using default response e Selected partition 4 First sector (12584960-41943039, default 12584960): Using default value 12584960 Last sector, +sectors or +size{K,M,G} (12584960-41943039, default 41943039): Using default value 41943039 Partition 4 of type Extended and of size 14 GiB is set
-
新建逻辑分区
Command (m for help): n All primary partitions are in use Adding logical partition 5 First sector (12587008-41943039, default 12587008): Using default value 12587008 Last sector, +sectors or +size{K,M,G} (12587008-41943039, default 41943039): +2G Partition 5 of type Linux and of size 2 GiB is set
-
保存退出,所有操作都保存在内存中,如果不w保存退出,那么方案不会生效,因此w保存退出,q是不保存退出
Command (m for help): w The partition table has been altered!
非交互式
[root@centos7 app]# echo -e "n\np\n\n\n+1G\nw\n" |fdisk /dev/sdb &> /dev/null
gdisk
只能划分gpt分区
gdisk -l:查看所有硬盘分区表
分区步骤
-
进入分区模式,查看帮助
[root@centos7 app]# gdisk /dev/sdb Command (? for help): ?
-
新建分区表
Command (? for help): o
-
新建分区
Command (? for help): n Partition number (1-128, default 1): First sector (34-41943006, default = 2048) or {+-}size{KMGTP}: Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +2G Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): Changed type of partition to 'Linux filesystem'
-
新建分区,GPT可以创建128分区,依次类推
-
保存退出
Command (? for help): w
非交互式
[root@centos7 app]# echo -e "n\n\n\n+2G\n\nw\ny\n" |gdisk /dev/sdb
同步分区表
在已经分区并且已经挂载在根文件系统的目录上的设备,再在这个设备上创建新的分区(比如在扩展分区上创建逻辑分区),内核可能在创建完成后无法直接识别
cat /proc/partitions:查看当前内核所加载的分区表
通知内核重读分区表的方式
partprobe:重读分区表 (centos6不可用)
partx -a /dev/sd#:重读新增分区(cenots6)
partx -d --nr M-N /dev/sd# :重读删除分区(cenots6)
网友评论