一、磁盘的物理组成
1、组成
圆形的磁盘盘
机械手臂,与在机械手臂上的磁盘读取头
主轴马达,可以转动磁盘盘,让机械手臂的读取头在磁盘盘上读写数据
磁盘盘:存储数据
如下图:
2、磁盘的文件名
/dev/sd[a-p][1-128]:实体磁盘的文件名
/dev/vd[a-d][1-128]:虚拟磁盘的文件名
/dev/md[1-128]:软件磁盘的文件名
只有将磁盘分区格式化之后,才能成为操作系统能够利用的文件系统格式
3、机械磁盘内部组成原理
盘面platter
磁道track
扇区sector
柱面Cylinder
硬盘的容量=柱面数(磁道数)×磁头数 ×单磁道扇区数 ×单个容量扇区大小(一般初始为512字节)
3、MBR
MBR(主引导记录区)位于整个硬盘的0磁道0柱面1扇区。不过,在总共512字节的主引导扇区中,MBR只占用了其中的446个字节,另外的64个字节交给了 DPT(硬盘分区表),最后两个字节“55,AA”是分区的结束标志。这个整体构成了硬盘的主引导扇区。
[root@localhost ~]# dd if=/dev/sda of=/tmp/mbr bs=1 count=512
[root@localhost ~]# hexdump -C /tmp/mbr
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 72 62 00 00 00 08 fa 90 90 f6 c2 80 |....rb..........|
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 9b dd 02 00 00 00 80 20 |............... |
000001c0 21 00 83 9f 06 19 00 08 00 00 00 40 06 00 00 9f |!..........@....|
000001d0 07 19 83 fe ff ff 00 48 06 00 00 00 40 01 00 fe |.......H....@...|
000001e0 ff ff 82 fe ff ff 00 48 46 01 00 00 40 00 00 00 |.......HF...@...|
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
00000200
mbr信息:
1、最前面的一列是8进制的位偏移,所以每行有16个字节了。
2、mbr总共512字节,前446个字节是主引导记录,是bios加电自检后要运行的代码
3、从第447个字节开始后的64个字节,每16个字节为一组,是硬盘分区表,就是上面彩色标记的部分了。
所以在MBR环境下主分区只能有4个,每个分区最大为2T
4、55aa是硬盘有效标志
4、分区
二、磁盘分区核心命令介绍
1、fdisk命令
查看系统的分区详细信息
[root@localhost ~]# fdisk -l
Disk /dev/loop0: 3916 MB, 3916431360 bytes
64 heads, 32 sectors/track, 3735 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x47840dcd
Device Boot Start End Blocks Id System
/dev/loop0p1 * 1 3735 3824640 17 Hidden HPFS/NTFS
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 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: 0x0002dd9b
Device Boot Start End Blocks Id System
/dev/sda1 * 1 26 204800 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 26 1332 10485760 83 Linux
/dev/sda3 1332 1593 2097152 82 Linux swap / Solaris
对磁盘进行分区
[root@localhost ~]# fdisk /dev/sda #对sda磁盘进行分区
Command (m for help): m #输出帮助信息
Command action
a toggle a bootable flag #设置启动分区
b edit bsd disklabel #编辑分区标签
c toggle the dos compatibility flag
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 create a new empty Sun disklabel
t change a partition's system id #改变分区的ID
u change display/entry units #改变显示的单位
v verify the partition table #检查验证分区表
w write table to disk and exit #保存分区表
x extra functionality (experts only)
Command (m for help): n
Command action
e extended #e是扩展分区
p primary partition (1-4) #p是主分区
p
Selected partition 4 #定义分区号 --主分区最多只能有四个
First cylinder (1593-2610, default 1593):
Using default value 1593
Last cylinder, +cylinders or +size{K,M,G} (1593-2610, default 2610): +100M
Command (m for help): w
The partition table has been altered!
#保存刚才的配置信息
[root@localhost ~]# partx -a /dev/sda #对硬盘进行更新
Device Boot Start End Blocks Id System
/dev/sda1 * 1 26 204800 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 26 1332 10485760 83 Linux
/dev/sda3 1332 1593 2097152 82 Linux swap / Solaris
/dev/sda4 1593 1606 111459 83 Linux
[root@localhost ~]# mkfs.ext4 /dev/sda4 #需要先进行格式化,才能使用
[root@localhost ~]# mount /dev/sda4 /mnt/sda4/ #进行挂载使用
[root@localhost ~]# df -h #查看
2、ext系列文件系统的管理工具
mkfs.ext2, mkfs.ext3, mkfs.ext4
3、ext系列文件系统专用管理工具:mke2fs
-t {ext2|ext3|ext4}:指明要创建的文件系统类型
mkfs.ext4 = mkfs -t ext4 = mke2fs -t ext4
-b {1024|2048|4096}:指明文件系统的块大小
-L LABEL:指明卷标
-i#:指明inode与字节的比率;即每多少字节创建一个Indode
-N# :直接指明要给此文件系统创建的inode的数量
-m #:指定预留的空间,百分比
4、 e2label命令:卷标的查看与设定
查看:e2label device
设定:e2label device LABEL
5、resize2fs:调整ext2\ext3\ext4文件系统的大小
-f:强制执行
6、e2fsck:磁盘修复 检查时先卸载
-a: 检查 partition,如发现问题会自动修复
-b: 设定 superblock 位置
-B size: 指定 size 作为区块大小
-c: 检查 partition 是否有坏轨
-C file: 将检查结果储存到 file
-f:e2fsck 预设只会对错误的文件系统检查,加上 -f 是强制检查
-F:在检查前将硬盘的 buffer cache 清空,避免发生错误
-v: 显示详细报告
-y: 启用使用者互动模式
7、fsck:检查与修复文件系统,可以同时检查一个或者多个
-s : 依序一个一个地执行 fsck 的指令来检查
-A : 对/etc/fstab 中所有列出来的 partition 做检查
-a : 如果检查有错则自动修复
-r : 如果检查有错则由使用者回答是否修复
8、blkid命令获取文件系统类型 UUID
blkid device
blkid -L LABEL:根据LABEL定位设备
blkid -U UUID:根据UUID定位设备
三、交换分区swap
查看当前的交换分区
[root@localhost ~]# free -m
[root@localhost ~]# swapon -s
增加交换分区
1、准备分区
[root@localhost ~]# fdisk /dev/sdb
[root@localhost ~]# partprobe /dev/sdb
[root@localhost ~]# ll /dev/sdb*
2、初始化
[root@localhost ~]# mkswap /dev/sdb1
3、挂载
[root@localhost ~]#blkid /dev/sdb1
/dev/sdb1: UUID="ea5b1c77-e540-463c-9644-0d75450f8b4c" TYPE="swap"
[root@localhost ~]# vim /etc/fstab
UUID="ea5b1c77-e540-463c-9644-0d75450f8b4c" swap swap default 0 0
[root@localhost ~]# swapon -a #读取/etc/fstab
[root@localhost ~]# swapon -s #查看当前交换分区
四、磁盘挂载等相关核心工具
1、mount命令
mount -t 文件系统 -o 选项… 设备名 挂载点
defaults:Use default options: rw, suid, dev, exec, auto, nouser, async, and relatime.
-r:readonly,只读挂载
-w:read and write, 读写挂载
-n:默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab文件中;-n用于禁止此特性
-t vfstype:指明要挂载的设备上的文件系统的类型
-L LABEL:挂载时以卷标的方式指明设备
-U:UUID:挂载时以UUID的方式指明设备
-o:指定挂载选项
查看当前系统所有已挂载的设备:
#mount
#cat /etc/mtab
#cat /proc/mounts
2、umount命令
umount device|directory
正在使用的挂载点是无法被卸载的
查看被哪个或哪些进程所占用:
#lsof MOUNT_POINT
#fuser -v MOUNT_POINT
终止所有正在访问某挂载点的进程:
#fuser -km MOUNT_POINT
3、lsof命令
列出当前系统打开文件
[root@localhost ~]# lsof
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
init 1 root cwd DIR 8,2 4096 2 /
init 1 root rtd DIR 8,2 4096 2 /
init 1 root txt REG 8,2 150352 397278 /sbin/init
init 1 root mem REG 8,2 65960 395612 /lib64/libnss_files-2.12.so
init 1 root mem REG 8,2 1923352 395596 /lib64/libc-2.12.so
init 1 root mem REG 8,2 90880 393227 /lib64/libgcc_s-4.4.7- 20120601.so.1
输出各列信息的意义:
COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD: 文件描述符,应用程序通过文件描述符识别该文件
TYPE:文件类型,如DIR、REG等常见的文件类型
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识) NAME:打开文件的确切名称
选项:
lsof -c abc :显示abc进程现在打开的文件
lsof -c -p 1234 :列出进程号为1234的进程所打开的文件
lsof -g gid :显示归属gid的进程情况
lsof -i :用以显示符合条件的进程情况
4、du命令
命令选项
-a #显示目录中文件的大小 单位 KB
-b #显示目录中文件的大小,以字节byte为单位
-c #显示目录中文件的大小,同时也显示总和;单位KB
-s #仅显示目录的总值,单位KB
5、/etc/fstab文件
系统开机时会主动读取/etc/fstab这个文件中的内容,根据文件里面的配置挂载磁盘。这样我们只需要将磁盘的挂载信息写入这个文件中就不需要每次开机启动之后手动进行挂载了。
挂载限制:
-
根目录是必须挂载的,而且一定要先于其他mount point被挂载。
-
挂载点必须是已经存在的目录。
-
挂载点的指定可以任意,但必须遵守必要的系统目录架构原则
-
所有挂载点在同一时间只能被挂载一次
-
所有分区在同一时间只能挂载一次
-
若进行卸载,必须将工作目录退出挂载点(及其子目录)之外
[root@localhost ~]# cat /etc/fstab # #/etc/fstab #Created by anaconda on Sat Mar 21 06:10:44 2020 # #Accessible filesystems, by reference, are maintained under '/dev/disk' #See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # UUID=476298de-c4c5-4eb4-b34f-f33a8d7223b8 / ext4 defaults 1 1 UUID=6b61a948-3588-41d0-a60f-a561491d23d2 /boot ext4 defaults 1 2 UUID=2f9147e2-b6c8-42e2-8724-97d1afcd0b37 swap swap defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 /dev/sr0 /media iso9660 defaults 0 0 第一列:Divice:磁盘设备文件或者设备的Lable页或UUID 查看UUID和Lable的命令:# dumpe2fs -h /dev/sda1 # blkid 第二列:Mount point:设备的挂载点,就是你要挂载到哪个目录下 第三列:filesystem:磁盘文件系统的格式,包括ext2、ext3、reiserfs、nfs、vfat等 第四列:parameters:文件系统的参数 第五列:能否被dump备份命令作用:dump是一个用来作为备份的命令。通常这个参数的值为0或者1 0 :代表不要做dump备份 1 :代表要每天进行dump的操作 2 :代表不定日期的进行dump操作 第六列:是否检验扇区:开机的过程中,系统默认会以fsck检验我们系统是否为完整 0 :不检验 1 :最早检验(一般根目录会选择使用2) 2: 1级别检验完成之后进行检验