磁盘管理
数据的存储总是需要一个载体,这个载体就是我们通常说的硬盘,硬盘它的构造就是一个不停在转的磁块,一个不停转的磁块是怎么存储数据的,为什么这个磁块需要不停的转动,并且我们日常购买磁盘,都希望磁盘的转速越快越好,这一切都取决于磁盘的存储数据的原理。目前市面上稍微高端一点的电脑全部都使用SSD,这种新磁盘为什么拥有那么好的性能。
一 磁盘
磁盘存储数据是把一个可以存储磁属性的东西赋予正负属性,多个正负组合在一起代表一个数据。工业中把磁盘分成如下图的样子
上图就是工业上划分磁盘的标准,首先把磁盘划分为一圈圈的磁道,然后把磁道分为一个个扇区,每个扇区存储512B数据。当今的磁盘一般不是一个盘片的硬盘,一般都是多个盘片,并且正反盘面都存储数据。
上图就是一个三盘片的磁盘,并且有六个磁头,磁头统一固定在一个可以转动的磁臂上。前面我们把磁盘分为一个个磁道,就是通过磁臂转动选择磁道。当读数据的时候,磁臂转到对应的磁道,然后确定在哪个磁头上的哪个扇区,这时就需要看磁盘的转速了,磁盘的转动速度越快,寻找扇区的速度越快。一个磁盘可以存储数据的大小=磁头数*磁道数*扇区数*512B。
二 磁盘使用
磁盘使用分为两个部分,一是磁盘管理,分区类型有mbr和gpt;二是文件系统管理,主要是在磁盘原本的存储结构上进一步划分,使得操作系统可以高效的利用磁盘。
1 磁盘分区类型
磁盘使用的时候总是需要了解磁盘信息,有时还需要把磁盘分为多个块使用,分块很有必要性,分块使用磁盘可以把不同的数据分开存放,这个分开存放比在同一个分区下把文件放在不同的目录要安全很多,比如数据文件比操作系统文件重要很多,分区后即使操作系统崩溃也不会导致数据的丢失。因为以上等等需求,使用磁盘前先规划记录磁盘信息变得尤其重要。
Mbr分区类型使用硬盘的0磁道的0扇区记录整个磁盘的信息。前644个字节存放磁盘的引导信息;然后64个字节存放分区信息,磁盘最多可以分4个主分区,也可以把最后一个分区更改为扩展分区,在扩展分区内继续分区。
gpt分区类型使用0磁道的前34个扇区存放信息,最多可以分128个分区,并且每个分区情况都会有一个备份。
-
分区查看
1
2
3
|
df 显示当前系统已经挂载各磁盘分区的大小和使用率,-h以易读的格式显示分区的大小。
lsblk 显示分区的大小 fdisk –l /device 显示某个硬盘的信息
|
-
磁盘分区
mbr分区命令
1
2
3
4
5
6
7
|
fdisk /device 这是交互式的命令,也可以通过接受<<eof获取参数
m 获取帮助
p 打印分区情况
n 创建分区
t 修改分区类型
gpt分区命令 gdisk /device 和 fdisk 的使用方式差不多
|
2 文件系统管理
仅对磁盘进行分区是完全不能满足我们的需求,操作系统管理文件需要更加具有规范的格式,这样才可以高效调用文件查询文件。
下图就是一个完整的从磁盘到操作系统管理数据的格式。
-
文件系统类型
Windows的文件系统的类型:ntfs,vfat
Linux:ext#,xfs,brtfs
ext3开始之后文件系统具有日志功能
Unix:。。。
网络文件系统:nfs,b2fs
分布式文件系统:chp。。。
文件系统创建
1
2
3
4
5
6
7
8
9
10
11
12
13
|
mkfs.{ext #|xfs|brtfs}[option]
-b {1024|2048|4096} 指定block的大小
-L label 指定lable
-U uuid 指定uuid
-m # 指定预留空间百分比
-i 指定inode比例,每多少空间创造一个inode
-I 指定inode的大小
-N 指定inode的熟练
-O [^|]
acl 文件系统默认挂载后是否有acl权限
sync 实时同步,系统性能会变得特别差
async
exec 目录下的文件不许执行
|
-
查看和修改
1
2
3
4
5
6
7
|
blkid device 显示分区的uuid和lable信息 tune2fs [option] /device/part
-l 列出分区的超级块信息
-L 指定lable信息
-U 指定uuid
-o 指定挂载选项
-m 指定预留空间大小
|
3 Swap分区
swap分区类似windows里的虚拟内存,作用就是虚拟内存使用硬盘模拟内存,内存不够的时候把数据暂存入此处。
1
2
3
|
mkswap /device/part 把格式化为swap分区
swapon [-p] /device/part **分区,-p指定使用的优先级
swapoff
|
三 文件系统的使用
1 挂载和卸载分区
1
2
3
4
5
6
7
8
9
10
11
|
mount [option] /device/part
-o 指定挂载选项
acl
sync
exec
remount
-a 重读 /etc/fstab 文件
umount [ /device/part | /dir ] 卸载目录
Fuser - v [ /device/part | /dir ] 查看某目录或文件正在使用的人
-km[ /device/part | /dir ] 踢出人
|
2 fstab
/etc/fstab这里主要是定义操作系统开机时挂载设备的选项
/etc/fstab的格式
/device/part /dir filetyp option 0 0
第一个字段是设备的路径或者uuid或者lable
第二个字段是挂载的命录
第三个字段是文件系统类型
第四个字段是挂载选项
第五个字段是转储频率
第六个字段是自检顺序
四 外围设备
添加设备文件
mknod[选项]... 名称 类型 [主设备号 次设备号]
光驱
eject
五 直接操作磁盘数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
dd if = source of=direct bs=block skip= seek= conv=conversion
of= file 写到所命名的文件而不是到标准输出
if = file 从所命名文件读取而不是从标准输入
bs=size 指定块大小(既是是ibs也是obs)
ibs=size 一次读size个byte
obs=size 一次写size个byte
cbs=size 一次转化size个byte
skip=blocks 从开头忽略blocks个ibs大小的块
seek=blocks 从开头忽略blocks个obs大小的块
count=n 只拷贝n个记录
conv=conversion[,conversion...] 用指定的参数转换文件
转换参数:
ascii 转换 EBCDIC 为 ASCII
ebcdic 转换 ASCII 为 EBCDIC
block 转换一行数据为长度为 cbs 的记录,不足部分用空格填充。
unblock 替代cbs长度的每一行尾的空格为新行
lcase 把大写字符转换为小写字符
ucase 把小写字符转换为大写字符
nocreat 不创建输出文件
noerror 出错时不停止
notrunc 不截短输出文件
sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
|
六 总结
这一章主要学习了磁盘的原理,磁盘的管理,文件系统的管理,各种设备的挂载和使用,和直接操作数据的命令dd。
遗漏
du –sh
free