磁盘管理
设备文件
1. I/O ports:I/O设备地址
2. 一切皆文件,open(),read(),write(),close(),对设备的操作也都是通 过这些底层函数进行的进行操作的
设备类型:
1. 块设备:block 存取单位“块”磁盘,(数据在磁盘中以块进行 存储的,它是零散 的随机存储)
2. 字符设备:char 存取单位“字符”,键盘
解释:在/etc/dev 目录下,用ls -l 显示该目录下的详细信息会看到用b 和c来标识的文件,该文件是字符设备还是块设备
设备文件:
设备文件关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信
设备号码:主设备号 次设备号
主设备号,标识设备类型(比如硬盘,光盘,终端等)
次设备号:标识同一类型下的不同设备(不同分区它的次设备编号也不 同)
/dev/vda 是虚拟磁盘,不是真实的磁盘
如下图
硬盘接口和类型
并行:
IDE:133MB/s SCSI:640MB/s
串口:
SATA : 6GPs
SAS : 6Gps 注意 这两个单位是b
USB: 480MB/s 注意 这个单位是B
思考:为什么串口的速度会那个快,并发接口每个针脚之间存在磁干扰, 并且没有错误修复,如果出现错误,会反复进行重传,这样它比串口的速度就会慢很多
rpm:在硬盘中指的是转速每分钟,rotations per minute
设备文件
磁盘设备的设备文件命名:/dev/DEV_FILE
IDE: /dev/hd(而在os7上这种接口的命令已经统一改为/dev/sd)
SCSI, SATA, SAS, USB: /dev/sd
不同设备:再用a-z字母进行区分/dev/sda/dev/sdb /dev/sdc/。如 果26个字符还不够 标识的话,那么就用/dev/sdaa /dev/sdab ……进行标识
同一设备上的不同分区:可以用数字进行表示1、2、2…..
/dev/sda1, /dev/sda5
磁盘存储术语
head :磁头 256个磁头
track :磁道 1024 个磁道
cylinder: 柱面 1024
secotr: 扇区,512bytes 63个扇区
总的容量为:512*63*1024*256
扇区*扇区个数*磁道数*磁头(或者盘面)
磁盘的结构:
磁盘 、 磁臂 、磁头、 扇区 、 磁道 、电机、盘片
遵循CHS标准,及柱面,磁头,扇区,磁盘管理的三围
用fdisk -l 来显示
早其的时候是以整个柱面进行划分的,同一个柱面不能相互被两个分区占用,
一个柱面是8兆,所以分区大小应该是8兆的整数倍
而在os7上是以扇区进行定义分区大小的
显示磁盘大小 df -h命令
fdisk是一个磁盘的管理工具
如果想让os7显示以柱面为分区单位那么就得用
fdisk -l -u=cylinders
磁盘分区:
为什么要分区?
优化I/O 性能 如:对文件进行操作时无需对整个磁盘进行操作,而是针对某个磁盘。
实现磁盘空间配额限制 如:可以限制磁盘空间
隔离系统和程序 如:/boot分区
安装多个OS 如:一块硬盘上可以格式话成多个文件系统
提高修复速度 如:果某个磁盘某个位置有问题,不需要进行全 盘进行搜素修复,而是针对某个分区进行修复
分区
分区的方式有两种:MBR GPT
MBR:主引导记录master boot record 使用32位表示扇区数量,因 为2的32次方为4G 而一个扇区的大小是512个字节,所以总大小为2T
通常是柱面进行分区的
0磁道0扇区:512字节
前446位:是与系统加载有关
系统加载
还有更早的lilo 只是引导机器
os6的有grub
os7而现在普遍用的grub2,还可以做一些加密和修复功能
64字节:分区表
用16字节标识一个分区:因此只能表示4个分区
用来标识磁盘从第几个柱面开始,到第几个柱面结束来表示一个分区
最后两位:标识位55AA
如果没有这个55AA的标志位,会表示这个磁盘上没有分区表,表示为一个裸盘,同时也是一个分区表的结束标识位
4个主分区 或者3个主分区和一个扩展分区+逻辑分区,其中逻辑分 区可以有多个
MBR硬盘分区结构图
其中分区表中16字节
第一字节 引导标志80表示活动分区,活动区域表示引导操作系统00表示非活动区域
第二字节 表示磁头号
第三字节和第四字节 第三字节低6为表示的是扇区号高两位和第四位表示的是柱面编号分区开始点
第五位 分区类型,0表示未使用分区
第六位 磁头号
第七字节和第八字节 第七位低6位表示扇区,高2位和第八个字节表示柱面号,
后四个字节表示分区开始LBA,就是把前面的
最后四字节表示分区结束LBA 逻辑寻址方式,是把chs模式转变成线性一维寻址方式
扩展分区
扩展分区0号扇区
扩展分区(446字节)全为零
分区表项同逻辑分区一样
但是每个逻辑分区前面都有一个零扇区
中间的那个提示表示的是分区一,没有以一个完整的柱面作为一个整分区
如果不想看那个信息可以用
fdisk -lc
linux中也支持以扇区为表示的显示分区信息
fdisk -lcu
如何产看磁盘的分区表的二进制呢?
hexdump -C -n 512 /dev/sda
备份分区表,但不是备份硬盘数据,备份的只是分区表
用dd if=/dev/sda of=/root/mbr bs=1 count=512
恢复分区表
dd if=/root/mbr of=/dev/sdb
注意扩展分区里面的逻辑分区备份不回来的,因为扩展分区中逻辑分区是保存在零扇区的,而不是硬盘的零扇区,逻辑分区不在mbr中存储
dd if=/dev/zero of=/dev/sdb bs=1 count=446
如何生效刚加入的硬盘,
1重启
2.用命令:echo “– – –”>/sys/class/scsi_host/host2/scan
注意两个横线直接是有空格的
GRT分区
支持128个分区,使用64位支持8Z(512byte/block)和64Z
使用128为UUiD表示磁盘和分区GPT
分区表自动备份在头和尾两份,并没有CRC校验位
UEFI(统一扩展固件接口)硬件支持GPT是操作系统使操作系统启动
如果不用GPT做引导,只是存数据,这样有没有有硬件支持都无所谓
LBA0内是存放伪MBR,及protection MBR、
因为很多分区工具只识别MBR分区方式,如果没有这个分区表会以为这是一个裸磁盘,这时候系统会提示设备为空,其实里面可能是有数据的,这样可能会造成数据的丢失
保护MBR的作用就是提示,就是提示上面有分区,不要轻易分区
防止老的分区工具破坏gpt分区
前面是分区表,后面是分区,最后面是备份分区表
列出块设备:lsblk
创建分区使用
fdisk创建MBR分区,也支持GPT,对于一块硬盘,最多只能管理15个分区
gdisk创建GPT分区
parted 高级分区操作(创建、复制、调整大小等等)他是非交互的因次操作比较危险慎用
partprobe 同步置内存分区表
查看分区的三种方式
第一种:lsblk
第二种:ll /dev/sd*
第三种:cat /proc/partitions
查看正在生效的设备,所谓生效就是加载到内存中
fdisk其实也能管理gpt格式的分区但是不长用,也不推荐用
要管理gpt有一个专门的工具进行管理gdisk
用fdisk分区时一定注意是对磁盘进行分区,而不是对分区进行分区
fdisk /dev/sdb
而不是 对分区进行进行分区,当然对分区进行在分区也不是是不可以只是不能分,这是会显示一个p的标识表示里面一个分区
在查看分区表中显示的块大小是以1k为大小的
解决添加分区后没有同步的问题
partx -a /dev/sda
partprobe 只有os6上不会生效
删除分区同步
partx -d –nr 7-8 /dev/sda n是分区号
查看正在生效的设备,所谓生效就是加载到内存中
fdisk其实也能管理gpt格式的分区但是不长用,也不推荐用
要管理gpt有一个专门的工具进行管理gdisk
用fdisk分区时一定注意是对磁盘进行分区,而不是对分区进行分区
fdisk /dev/sdb
而不是 对分区进行进行分区,当然对分区进行在分区也不是是不可以只是不能分,这是会显示一个p的标识表示里面一个分区
在查看分区表中显示的块大小是以1k为大小的
解决添加分区后没有同步的问题
partx -a /dev/sda
partprobe 只有os6上不会生效
删除分区同步
partx -d –nr 7-8 /dev/sda n是分区号
parted 的操作都是实时生效的,小心使用
v 用法:parted [ 选项]… [备 设备 [令 命令 [ 参数]…]…]
parted /dev/sdb mklabel gpt|msdos 创建gpt方式或是mbr方式分区
parted /dev/sdb print 打印分区列表
parted /dev/sdb mkpart primary 1 200 创建分区,
parted /dev/sdb rm 1 删除分区
parted -l
文件系统
文件系统:是操作系统用于明确存储设备或分区上的文件的方
法和数据结构;即在存储设备上组织文件的方法。操作系统
中负责管理和存储文件信息的软件结构称为文件管理系统,
简称文件系统。
从系统角度来看,文件系统是对文件存储设备的空间进行组
织和分配,负责文件存储并对存入的文件进行保护和检索的
系统。具体地说,它负责为用户建立文件,存入、读出、修
改、转储文件,控制文件的存取,安全控制,日志,压缩,
加密等
文件系统类型 Linux 文件系统: ext2, ext3, ext4, xfs (SGI ), btrfs( Oracle ), reiserfs, jfs (AIX ), swap
swap: 交换分区
光盘:iso9660
Windows :fat32, ntfs
Unix: FFS (fast ), UFS (unix ), JFS2
网络文件系统:NFS, CIFS(windows的文件共享)
集群文件系统:GFS2, OCFS2 (oracle) )
分布式文件系统:ceph, moosefs, mogilefs, glusterfs,红帽的数据同步
Lustre
RAW :未经处理或者未经格式化产生的文件系统,分完区,没有进行任何操作,
文件系统分类
根据其是否支持"journal" 功能:
日志型文件系统: ext3, ext4, xfs, …
非日志型文件系统: ext2, vfat
文件系统的组成部分:
内核中的模块:ext4, xfs, vfat
用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
v Linux 的虚拟文件系统:VFS
查前支持的文件系统:cat /proc/filesystems
用lsmod可以查看系统支持的安装模块
上图的数字表示的引用的次数
查看系统所支持的文件系统
autofs自动挂载,只有一访问/misc/cd就会触发这个命令
创建文件系统
mkfs.ext4 /dev/sdb1 一旦创建就会自动创建一个UUID
UUID来唯一标识一个分区标识
查看文件的大小du 命令
ext4文件系统中最小的单位是1k 2k 4k
用命令tune2fs -l /dev/sda |grep size
在一个分区中,通常会有超块来记录组的元信息,包括:里面分了几个组每个组是从第几个块到第几个组结束,块大小,在格式话的时候超级开的大自动已经完成了备份,
一个组的大小通常是8192
用命令dumpe2fs /dev/sdb1
查看文件类型
blkid
用卷标进行查找blkid -L 卷标名
blkid -U uuid=dedjggj
如何生成随机生成uuidgen
如何去掉日志功能和添加日志功能
tune2fs -O ^has_journal /dev/sda5
tune2fs -O has_journal /dev/sda5
只有挂载才能查看用df命令查看
mkfs 命令:
(1) # mkfs.FS_TYPE /dev/DEVICE
ext4
xfs
btrfs
vfat
(2) # mkfs -t FS_TYPE /dev/DEVICE
-L 'LABEL': 设定卷标
e2label /dev/sdb1 /mnt/sdb1如果已经格式化了,就用这个进行修改卷标名称
mke2fs :ext 系列文件系统专用管理工具
-t {ext2|ext3|ext4}
-b {1024|2048|4096}
-L 'LABEL'
-j: 于 相当于 -t ext3
mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i #: 为数据空间中每多少个字节创建一个inode ;此大
小不应该小于block 的大小
-N # :为数据空间创建个多少个inode
-m #: 默认5%, 为管理人员预留空间占总空间的百分比
-O FEATURE[,…] :启用指定特性
-O ^FEATURE
文件系统标签
tune2fs :重新设定ext 系列文件系统可调整参数的值
-l :查看指定文件系统超级块信息;super block
-L 'LABEL' :修改卷标
-m # :修预留给管理员的空间百分比
-j: 将ext2 升级为ext3
-O: 文件系统属性启用或禁用, –O ^has_journal
-o: 调整文件系统的默认挂载选项,–o ^acl
-U UUID: 修改UUID 号;
v dumpe2fs: :
-h查看超级块信息(分组信息),分区用分组管理
mount -o acl /dev/sdb /mnt/sdb3 用mount来加载acl
tune2fs -o acl
然后用fsck命令修复
常发生于死机或者非正常关机之后
v 挂载为文件系统标记为“dirty” ”
v fsck: File System Check
fsck.FS_TYPE
fsck -t FS_TYPE
-a: 自动修复错误
-r: 交互式修复错误
v 注意: FS_TYPE 一定要与分区上已经文件类型相同;
v e2fsck :ext 系列文件专用的检测修复工具
-y :自动回答为yes
-f :强制修复
挂载mount
挂载: 将额外文件系统与根文件系统某现存的目录建立起关联
关系,进而使得此目录做为其它文件访问入口的行为
v 卸载:为 为 解除此关联关系的 过程
v 把设备关联挂载点:mount Point
mount 卸载时:可使用设备,也可以使用挂载点
umount
v 挂载点下原有文件在挂载完成后会被临时隐藏
v 挂载点目录一般为空
用mount 命令挂载文件系统
挂载方法:mount DEVICE MOUNT_POINT
v mount :通过查看/etc/mtab 文件显示当前已挂载的所有设备
v mount [-fnrsvw] [-t vfstype] [-o options] device dir
device :指明要挂载的设备;
(1) 设备文件:例如/dev/sda5
(2) 卷标:-L 'LABEL', 如 例如 -L 'MYDATA'
(3) UUID, -U 'UUID'如 :例如 -U '0c50523c-43f1-
45e7-85c0-a126711d406e'
(4) 伪文件系统名称:proc, sysfs, devtmpfs, configfs
dir :挂载点
事先存在;建议使用空目录
进程正在使用中的设备无法被卸载
mount常用命令选项
-t vsftype :指定要挂载的设备上的文件系统类型
v -r: readonly ,只读挂载
v -w: read and write, 读写挂载
v -n: 不更新/etc/mtab ,相当于#mount
v -a :自动挂载所有支持自动挂载的设备( 定义在了/etc/fstab
文件中,且挂载选项中有auto 功能)
v -L 'LABEL': 以卷标指定挂载设备
v -U 'UUID': 以UUID 指定要挂载的设备
v -B, –bind: 绑定目录到另一个目录上
v 查看内核追踪到的已挂载的所有设备:
cat /proc/mounts
mount常用命令选项
-o options :( 挂载文件系统的选项) ,多个选项使用逗号分隔
async :异步模式
sync :同步模式, 内存更改时,同时写磁盘
atime/noatime :包含目录和文件
diratime/nodiratime :目录的访问时间戳
auto/noauto :是否支持自动挂载, 是否支持-a 选项
exec/noexec :是否支持将文件系统上运行应用程序
dev/nodev :是否支持在此文件系统上使用设备文件
suid/nosuid :不否支持suid 和sgid 权限
remount :重新挂载
ro :只读
rw: : 读写
user/nouser :是否允许普通用户挂载此设备,默认管理员才能挂载
acl :启用此文件系统上的acl 功能
v Defaults :相当于rw, suid, dev, exec, auto, nouser, async
卸载命令和/etc/fstab
查看挂载情况:
#findmnt MOUNT_POINT
v 查看正在访问指定文件系统的进程:
#lsof MOUNT_POINT
#fuser -v MOUNT_POINT
v 终止所有在正访问指定的文件系统的进程:
# fuser -km MOUNT_POINT
v 卸载:
# umount DEVICE
# umount MOUNT_POINT
配置文件系统体系
v 被 被mount 、fsck 和其它程序使用
v 系统重启时保留文件系统体系
v 可以在设备栏使用文件系统卷标
v 使用mount -a 命令挂载/etc/fstab 中的所有文件系统
原创文章,作者:yywan1314,如若转载,请注明出处:http://www.178linux.com/40362
评论列表(1条)
文章对磁盘的基础知识总结的较为全面,内容完整,但是对于纯理论的东西,我们要尽量做到清晰化,也就是说明确定义,并通过查找资料来进行描述,而不是简单的列一些关键字,这是不好的,需要作者多加注意。