磁盘管理和文件系统
1、设备文件
I/O ports:IO设备地址
一切皆文件:open(),read(),write(),close()
设备类型:
块设备:block,存取单位 ”块“,磁盘
字符设备:char,存取单位”字符“,键盘
设备文件:关联至一个设备驱动程序,进而能够与之对应硬件设备进行通信。
设备号码:
主设备号:major,标识设备类型
次设备号:minor,表示同一类型下的不同设备
2、硬盘接口类型:
并行:IDE:133MB/S SCSI:640MB/S
串口:SATA:6Gbps, SAS:6 USB:480MB/S
rpm:rotations per minute
3、机械硬盘和固态硬盘:
HDD,机械硬盘
SSD,固态硬盘
4、设备文件
磁盘设备的设备文件命名: /dev/DEV_FILE
SCSI, SATA, SAS, IDE, USB: /dev/sd
虚拟磁盘: /dev/vd
不同磁盘标识:a-z,aa, ab , ac,.....
/dev/sda /dev/sdb
同一设备上的不同分区:1,2,3....
/dev/sda1 , /dev/sda2, .....
磁盘术语:
head:磁头
track:磁道
cylinder:柱面
sector:扇区,512bytes
5、CHS和LBA
CHS 采用24bit位寻址 其中前10位表示cylinder,中间8位表示head,后面6位表示sector 最大寻址空间8GB LBA(logical block addressing) LBA是一个整数,通过转换成CHS格式完成磁盘具体寻址
LBA采用48个bit位寻址 最大寻址空间128PB
由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容量小于大概8GB 时,可以使用CHS寻址方式或是LBA寻址方式;在磁盘容量大于大概8GB时,则 只能使用LBA寻址方式
6、使用分区空间
设备识别,设备分区,创建文件系统,标记文件系统,在/etc/fstab文件中创建条目,挂载新的文件系统
6.1、磁盘分区
分区原因:
-
-
- 优化IO性能
- 实现磁盘空间配额限制
- 提高修复速度
- 隔离系统和程序
- 安装多个os
- 采用不同的文件系统
-
分区:
两种分区方式:MBR, GPT
MBR:master boot record 使用32位表示扇区书,分区不超过2T
如何分区:按柱面
0磁道0扇区:512bytes
446:boot loader
64:分区表
16bytes 标识一个分区
2bytes: 55AA
4个分区:3个主分区 + 1个扩展分区(N个逻辑分区)
7、MBR分区结构
活动分区引导系统,且只有一个活动分区!
MBR分区结构:
硬盘主引导记录MBR由4个部分组成
1、主引导程序(偏移地址0000H-0088H),它负责从活动分区中装载,并运行系统引导程序。
2、出错信息数据区,便宜地址0089H-00E1H为出错信息,00E2H-01BDH全为0字节
3、分区表(DPT,disk partition table)含4个分区项,每个分区表项长16个字节,共64字节为分区项1,2,3,4
4、结束标志字,2个字节的结束标志55AA
8、GPT分区:
GPT:GUID (globals unique identifiers) partition table支持128个分区,使用64位,支持8Z(512Byte/block) 64Z(4096Byte/block)
使用128位UUID(universally unique identifier) 表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC检验位
UEFI(统一扩展固件接口)硬件支持GPT,使操作系统启动。
GPT分区结构:会有备份,可以还原,但是MBR 没有!
GPT分区结构:
9、列出可用的磁盘设备
图形化磁盘管理工具:点击“应用程序” -> "系统工具“ -> ”磁盘“ 或执行 命令gnome-disks
BIOS + MBR 与 UEFI + GPT
fdisk 执行 如果有 dos, 就是mbr分区方式
10、管理分区:
列出块设备:lsblk
创建分区使用:
fdisk 创建MBR分区
gdisk 创建GPT分区
parted 高级分区操作 (下面讲)
partprobe - 重新设置内存中的内核分区表版本
11、parted命令:
parted的操作都是实时生效的
用法:
parted /dev/sdb mklabel gpt | msdos :创建分区,gpt还是 mbr分区,只是一个分区表。
parted /dev/sdb print:打印分区信息
parted /dev/sdb mkpart primary 1 200 ---1M 到 200M 为 第一个分区(默认是M),分区,每个分区多大
parted /dev/sdb rm 1 删除分区,如果多个,可以删除前面的
parted -l:列出分区信息
12、分区工具fdisk 和 gdisk
gdisk /dev/sdb 类fdisk的GPT分区工具
fdisk -l [-u] [device]
fdisk /dev/sdb 管理分区
子命令:
p: 分区列表
t:更改分区类型
n:创建新分区
d:删除分区
v:校验分区
u:转换单位
w:保存并退出
q:不保存并退出
l:列出分区类型
13、查看内核是否已经识别新的分区
cat /proc/partations
centos6 通知内核重新读取硬盘分区表
新增分区用
partx -a /dev/DEVICE
kpartx -a /dev/DEVICE -f: force
删除分区用
partx -d --nr M-N /dev/DEVICE
centos7 使用 partprobe
partprobe [ /dev/DEVICE]
14、文件系统
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即 在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结 构称为文件管理系统,简称文件系统 。
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文 件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立 文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压 缩,加密等 。
查看系统支持的文件系统: /lib/modules/`uname -r`/kernel/fs
uname -r : 内核版本
各种文件系统:https://en.wikipedia.org/wiki/Comparison_of_file_systems
15、文件系统类型:
Linux文件系统:
ext2(Extended file system) :适用于那些分区容量不是太大,更新也不频繁的情况, 例如 /boot 分区。
ext3:是 ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中 恢复。它通常被用作通用的文件系统
ext4:是 ext 文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使 用巨型文件(16TB)、最大1EB的文件系统,以及速度的提升
xfs:SGI,支持最大8EB的文件系统
btrfs(Oracle), reiserfs, jfs(AIX), swap
光盘:iso9660
Windows:FAT32, exFAT,NTFS
网络文件系统:NFS, CIFS
集群文件系统:GFS2, OCFS2(oracle)
分布式文件系统: fastdfs,ceph, moosefs, mogilefs, glusterfs, Lustre
RAW:未经处理或者未经格式化产生的文件系统
16、文件系统分类:
根据其是否支持 journal 功能
日志型文件系统: ext3 ext4 xfs ..
非日志型文件系统:ext2 vfat
文件系统的组成部分:
内核中的模块:ext4,xfs, vfat
用户空间的管理工具: mkfs.ext4 mkfs.xfs. mkfs.vfat
Linux的虚拟文件系统 vfs
不同的文件系统,上面有一个虚拟文件系统,屏蔽了不同文件系统的不同特性
lsmod:查看当前系统加载的模块
查当前支持的文件系统 :cat /proc/filesystems
17、创建文件系统:
mkfs命令:
1、mkfs.FS_TYPE /dev/DEVICE
ext4
xfs
btrfs
vfat
2、mkfs -t FS-TYPE /dev/DEVICE
-L 'LABEL' :设定卷标,理解为名字,一般命名是挂载点作为名字、
-f:强制格式化
创建ext文件系统
mke2fs:ext系列文件系统专用管理工具
-t ext2|3|4 默认是2
-b {1024|2048|4096} 制定块大小,制定空间存放数据的最小值,windows中叫簇
-L ‘label'
-j :相当于 -t ext3
-i #:为数据空间中每多少个字节创建一个inode,此大小不应该小于block的大小
一个文件需要一个inode号
-N # :制定分区中创建多少个inode
-I 一个inode记录占用的磁盘空间大小,128--4096
-m # :默认5%,为管理人员预留空间占总空间的百分比
-O FEATURE[,.....]: 启用制定特性,使用tune2fs查看,右边的就是特性
-O ^FEATURE:关闭制定特性
18、文件系统标签:
指向设备的另一种方式
与设备无关
blkid:块设备属性信息查看
-U UUID
-L ’label‘
e2label:管理ext系列文件系统的label
e2label DEVICE [LABEL]
findfs : 查找分区
findfs LABEL='label'
findfs UUID=’uuid'
tune2fs:重新设定ext系列文件系统可调整参数的值,比如支持acl
-l:查看制定文件系统超级块信息
-L ‘label’ :修改卷标
-m # :修改预留给管理员的空间的百分比
-j:将ext2 升级为ext3
-O:文件系统属性启用或禁用 -O ^has_journal 禁用日志
-o: 调整文件系统的默认挂载选项 -o ^acl
-U UUID:修改uuid
dumpe2fs:
块分组管理
-h:查看超级快信息,不显示分组信息
超级快和inode table
19、文件系统检测和修复:
常发生于死机或者非正常关机之后
挂在为文件系统标记为 no clean
注意:一定不要挂载状态下 修复,通过备份超级块恢复
fsck:file system check
fsck.FS_TYPE 或者 fsck -t FS_TYPE
-p:自动修复错误
-r:交互式修复错误
e2fsck :ext系列文件专用的检测修复工具
-y:自动回答为yes
-f:强制修复
20、挂载:
挂载:将额外的文件系统与根文件系统某现存的目录建立起关系,进而使得此目录作为其他文件访问入口。
卸载:为解除此关联关系的过程
把设备关联挂载点: mount Point
卸载 :umount
挂载点下原有文件,将被临时隐藏
mount:
挂载方法:mount DEVICE POINT
mount :通过查看/etc/matab 文件显示当前已经挂在的所有设备
mount [-o options] DEVICE DIR
-t FS-TYPE : 指定要挂载的设备上的文件系统类型
-r: 只读 -w: 读写
-n : 不更新/etc/mtab, 执行mount 不会显示
-a:自动挂载定义在 mtab中的,且挂载选项中有auto 功能。
-L ‘label' 以卷标制定挂载设备
-U UUID:以uuid指定挂载的设备
-B:绑定目录到另一个目录上,绑定后的目录的inode和原来的目录的inode一样,所以操作的是同一个目录,只不过呗绑定的目录里的数据暂时被隐藏了
查看内核追踪到的已挂载的所有设备:
cat /proc/mounts
常用选项:
-o options :挂载文件系统的选项,多个选项使用逗号分隔
async:异步模式 sync:同步,内存更改时,同时写磁盘
atime/noatime:访问时间戳,包含目录和文件
diratime/nodiratime: 目录的访问时间戳
auto/moauto:是否支持自动挂载,也就是mount -a
exec/noexec:是否支持将文件系统上运行应用程序
dev/nodev:是否支持在此文件系统上使用设备文件
suid/nosuid:是否支持suid和sgid 权限
ro:只读,rw:读写
user/nouser:是否允许普通用户挂载此设备, /etc/fstab使用
acl:启用此文件系统上的acl功能
loop:使用loop设备,文件往文件夹上挂,centos6上使用,
centos7,如果/dev/loop不够用 ,回自动生成 ,loop[+1],
mknod /dev/loop100 b 7 100 :可以创建设备
defaults:相当于rw, suid,dev。exec, auto, nouser,async
21、卸载:
查看挂载情况: findmnt MOUNT_POINT / DEVICE
查看正在访问指定文件系统的进程:
lsof MOUNT-POINT
fuser -v MOUNT-POINT ----------fuser来自psmisc软件包
终止所有正在访问指定的文件系统的进程
fuser -km MOUNT-POINT
卸载:umount device 。 umount MOUNT_POINT
22、挂载点 和 /etc/fstab
配置文件系统体系
被mount, fsck和其他程序使用
系统重启时保留文件系统体系
可以在设备兰使用文件系统卷标
使用mount -a 命令挂载/etc/fstab中的所有文件系统
23、文件挂载配置文件
/etc/fstab 每行定义一个要挂载的文件系统
1、要挂载的设备或伪文件系统
设备文件
LABEL: LABEL=""
UUID: UUID=""
伪文件系统名称: proc,sysfs
2、挂载点
3、文件系统类型 ext4
4、挂载选项:defaults, acl, bind
5、转储频率:0 不做备份, 1 每天转储,2,隔一天转储
6、fsck检查的文件系统的顺序,
0:不自检
1:首先自检,一般只有rootfs才用
2:非rootfs使用
实验:将home迁移到一个新的分区中。
1、分一个新分区。并格式化(创建文件系统)
2、mkdir /tmp/home
3、mount /dev/sda5 /tmp/home
4、init 1 , 系统作为单用户状态,避免别人载此期间修改
5、cp -rv /home /tmp/home
6、将/dev/sda5 挂载到/home上,原来的/home下的文件就可以删除了
在vim中 命令模式下: r! cat /etc/shadow 可以执行shell 命令
24、处理交换文件和分区“
交换分区时系统RAM的补充
基本设置包括:
创建交换分区或者文件
使用mkswap 写入 特殊签名 mkswap DEVICE
在/etc/fstab文件中添加适当的条目
使用swapon -a,激活交换空间,也就是挂载上
free -h 查看内存使用情况
小内存,一般swap是内存的1.5倍,否则 8G就行
创建新的分区,并选择文件系统类型是SWAP,在用mkswap 创建swap分区
如果多个交换分区,利用free -h 是看不出来的,在 /proc/swaps中可以看出,或者swapon -s
挂载交换分区:
启用: swapon:
-a:激活所有的交换分区
-p # :指定优先级,也就是多个交换分区,先使用哪一个
在 fstab中 使用 pri=# 指定
禁用:swapoff DEVICE
如何删除:
先禁用swap,在删除fstab中的记录,在删分区
如何拿文件当swap使用:
dd if=/dev/zero of=/swapfile bs=1G count=1
mkswap /swapfile
25、挂载光盘iso9600
在图形化环境下自动启动挂载 /run/media/<user>/<label>
手动挂载:mount /dev/cdrom POINT
eject命令:卸载或弹出磁盘
创建ISO文件
cp /dev/cdrom /root/centos.iso
mkisofs -r -o /root/etc.iso /etc
刻录光盘:
wodim -v -eject ecntos.iso
26、挂载USB介质
查看usb设备是否识别 lsusb
被内核探测为SCSI 设备
/dev/sdaX /dev/sdbX 或类似的设备文件
在图形环境中自动挂载
手动挂载
27、常见工具:
文件系统空间占用等信息的查看工具
df [optiion] [file]
-
-
- -H 以 1000 为单位
- -T 文件系统类型
- -h:人类可读
- -i:inodes 代替 blocks
- -P:以Posix兼容的格式输出
-
查看某目录总体空间占用状态”
du [option] DIR
-h: 人类可读
-s:summary
工具 dd
conv=conversion[,conversion...] 用指定的参数转换文件
转换参数:
ascii 转换 EBCDIC 为 ASCII
ebcdic 转换 ASCII 为 EBCDIC
lcase 把大写字符转换为小写字符
ucase 把小写字符转换为大写字符
nocreat 不创建输出文件
noerror 出错时不停止
notrunc 不截短输出文件
sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
备份MBR :dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
破坏MBR中的bootloader: dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446
有一个大与2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读 取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开 始的位置,替换128Bytes,实现如下: dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc
可以用来备份和恢复!!!!