第09章 存储管理2
2018-04-17 本文已影响8人
fe8478c7ba2a
存储管理高级课程
文件系统详解
EXT3/4文件系统
详解
类型
索引index文件系统
系统限制
Ext3: 文件系统最大16TB,单个文件最大2TB
Ext4: 文件系统最大16TB,单个文件最大16TB
存储结构
磁盘>分区>文件系统>块组>索引目录>数据块
名词解释
superblock:记录此文件系统的整体信息。包括inode/block的总量,使用量,剩余量,以及文件系统的格式等等。
inode:记录文件的属性(文件的元数据metadata),一个文件占用一个inode,同时记录此文件数据所在的block numbber。inode大小 为 128 bytes
block:实际存储文件的内容,若文件较大,会占用多个block。block大小 为 1, 2, 4K
superblock
1 block 与 inode 的总量;
2未使用与已使用的 inode / block 数量;
3 block 与inode 的大小 (block 为 1, 2, 4K,inode 为 128 bytes);
4 filesystem 的挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间等文件系统的相关信息;
5一个 valid bit 数值,若此文件系统已被挂载,则 valid bit 为 0 ,若未被挂载,则 valid bit 为 1
6 superblock的备份信息。
inode
包含文件的元信息,具体来说有以下内容:
* 文件的字节数
* 文件拥有者的User ID
* 文件的Group ID
* 文件的读、写、执行权限
* 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
* 链接数,即有多少文件名指向这个inode
* 文件数据block的位置
block
存储文件的实际数据。BLOCK 大小设置
示例
1:inode
创造一个文件,观察inode信息。
ll -i 文件名
2:block
问题1:分区中,文件的数量和什么有关系。
1 观察某个分区中的inode节点数
df -i
2 创建一个文件
touch 文件名
3 再次观察inode节点数
df -i
4 创造大量文件。观察inode使用情况
for i in `seq 30000` ; do touch $i ; done
5 在另一个SHEEL,观察inode变化情况。
watch -n 2 'df -i'
6 请问最后,还能否创建新文件呢?
结论:inode决定了文件系统中文件的数量。
7.但是,能否向已存在的文件中写入内容呢?答案是?
结论:block决定了文件存储的空间。
问题:当分区空间大小消耗完毕,还能否新增文件?
cp: 无法创建普通文件"": 设备上没有空间
1 向目标分区写入大量数据,填满
dd if=/dev/zero of=/disk1/5.txt bs=1k count=1000
2 查看目标分区容量,已满
df -hT
3 创造新文件
touch
4 得出结论,磁盘空间的限制根据inode和block两方面
请清理掉填满的分区。避免不必要的报错。
3:superblock
目的:通过查询文件系统,理解inode/block/group block的概念
ext4文件系统
1. 方法一:dumpe2fs 查看文件系统
1 dumpe2fs 查看EXT4文件系统。
[root@localhost ~]#dumpe2fs /dev/vg1/lv1
[root@localhost ~]# dumpe2fs /mnt/lv2 |less
Filesystem volume name: <none> //卷标
Last mounted on: /mnt/lv2 //最后一次挂载
Filesystem UUID: 0b6c98a1-0ec4-4fc6-b594-38d729d3791e //uuid
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic) //版本
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize //特性
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl //默认挂载属性
Filesystem state: clean //干净,非修复状态
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 77824 //inode总数
Block count: 307200 //block总数
Reserved block count: 14335 //保留block
Free blocks: 264119 //空闲block
Free inodes: 75324 //空闲inode
First block: 1 //第一个block
Block size: 1024 //block大小
Fragment size: 1024
Group descriptor size: 64
Reserved GDT blocks: 255
Blocks per group: 8192
Fragments per group: 8192
Inodes per group: 2048
Inode blocks per group: 256
Flex block group size: 16
Filesystem created: Thu Oct 12 7:49:17 2016 //创建时间
Last mount time: Thu Oct 12 8:11:01 2016 //上次挂载
Last write time: Thu Oct 12 8:11:01 2016 //文件系统写入时间
Mount count: 2 //挂载次数
Maximum mount count: -1
Last checked: Thu Oct 12 8:49:17 2017 //最后一次检测
Check interval: 0 (<none>)
Lifetime writes: 39 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11 //第一个inode
Inode size: 128 //inode大小,字节
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: ae1105b5-c894-4e37-84e3-16ac564f60d4
Journal backup: inode blocks
Journal features: journal_incompat_revoke journal_64bit
日志大小: 4096k
Journal length: 4096 //日志类信息
Journal sequence: 0x00000008
Journal start: 1
Group 0: (Blocks 1-8192) [ITABLE_ZEROED]
Checksum 0xa19a, unused inodes 514
主 superblock at 1, Group descriptors at 2-4
保留的GDT块位于 5-259
Block bitmap at 260 (+259), Inode bitmap at 276 (+275)
Inode表位于 292-547 (+291)
3412 free blocks, 514 free inodes, 366 directories, 514个未使用的inodes
可用块数: 4781-8192
可用inode数: 1535-2048
Group 1: (Blocks 8193-16384) [INODE_UNINIT, ITABLE_ZEROED]
Checksum 0x4d50, unused inodes 2048
备份 superblock at 8193, Group descriptors at 8194-8196 //备份的超级块,用来恢复损坏块组的。
保留的GDT块位于 8197-8451
Block bitmap at 261 (bg #0 + 260), Inode bitmap at 277 (bg #0 + 276)
Inode表位于 548-803 (bg #0 + 547)
499 free blocks, 2048 free inodes, 0 directories, 2048个未使用的inodes
可用块数: 10253, 10255-10752
可用inode数: 2049-4096
2. 方法二:tune2fs查看文件系统(可修改卷标)
tune2fs 也可以查看文件系统。
[root@localhost ~]# tune2fs -l /dev/sda3
tune2fs 1.39 (29-May-2006)
Filesystem volume name: qianfeng
Last mounted on: <not available>
Filesystem UUID: 28459f88-87dc-4624-94a7-07b0f3eb2420
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 48960
Block count: 195312
Reserved block count: 9765
Free blocks: 183410
Free inodes: 48946
First block: 1
Block size: 1024
First inode: 11
Inode size: 128
Journal inode: 8
##修改卷标,可使用-L 参数
例如:tune2fs -L qianfeng /dev/vg1/lv1
扩展选项
xfs文件系统
xfs_growfs /dev/vg1/lv1
xfs_info /dev/vg1/lv1
:修改卷标
更改ext4文件系统的卷标信息(设置标签)
[root@tianyun ~]# tune2fs -L music /dev/vg1/lv1
XFS文件系统
注意:与EXT4修复同理,不可以挂载使用文件系统时修复。
FAT文件系统
文件链接
一、符号链接 symbolic link /软链接
一、符号链接 symbolic link /软链接,绝对路径记录/快捷方式。
1 创建一个文件,并输入内容。
[root@tianyun ~]# echo 111 > /file1
2 创建一个软连接。
[root@tianyun ~]# ln -s /file1 /home/file11
3 观察软连接
[root@tianyun ~]# ll /home/file11
lrwxrwxrwx 1 root root 6 Dec 20 17:58 /home/file11 -> /file1
4 观察软连接文件的inode是新的。内容是6,就是源文件的绝对路径。
[root@tianyun ~]# ll -i /file1 /home/file11
4599081 -rw-r--r-- 1 root root 4 Dec 20 17:57 /file1
135 lrwxrwxrwx 1 root root 6 Dec 20 17:58 /home/file11 -> /file1
5 查看两个文件,内容一致。
[root@tianyun ~]# cat /file1
111
[root@tianyun ~]# cat /home/file11
111
6 删除源文件,软连接闪烁,不可用。
[root@tianyun ~]# rm -rf /file1
[root@tianyun ~]# ll /home/file11
lrwxrwxrwx 1 root root 6 Dec 20 17:58 /home/file11 -> /file1
总结:软连接是一个新文件,像快捷方式,可以对文件和目录做软连接。
软连接记录的只是源文件的绝对路径。
软连接失去源文件不可用。
二、硬链接
二、硬链接,新的文件入口
1 创建同分区硬链接成功,创建不同分区硬链接失败。
[root@tianyun ~]# echo 222 > /file2
[root@tianyun ~]# ln /file2 /file2-h1
[root@tianyun ~]# ln /file2 /home/file2-h2
//将文件已硬链接方式,发送到其他分区。结果是?
ln: failed to create hard link ‘/home/file2-h2’ => ‘/file2’: Invalid cross-device link
[root@tianyun ~]# ln /file2 /etc/file2-h3
2 硬链接的inode号相同,但并不占用block。使用df -k观察硬链接数量无变化。
[root@tianyun ~]# ll -i /file2 /file2-h1 /etc/file2-h3
4599081 -rw-r--r-- 3 root root 4 Dec 20 18:03 /etc/file2-h3
4599081 -rw-r--r-- 3 root root 4 Dec 20 18:03 /file2
4599081 -rw-r--r-- 3 root root 4 Dec 20 18:03 /file2-h1
把一些重要文件做多个链接
3 不允许将硬链接指向目录
[root@tianyun home]# ln /home/ /mnt
ln: “/home/”: 不允许将硬链接指向目录
总结:硬链接只能针对文件做。不能对目录做。
硬链接只能在同分区做。
硬链接不占用block。
硬链接其实是复制了inode。
RAID(了解)
简介
RAID:廉价磁盘冗余阵列(Redundant Array of Independent Disks)
作 用:容错、提升读写速率
类型
RAID类型 个数 利用率 优缺点
----------------------------
--------------------------
RAID0 条带集 2+ 100% 读写速率快,不容错
RAID1 镜像集 2 50% 读写速率一般,容错
RAID5 带奇偶校验条带集 3+ (n-1)/n 读写速率快,容错,允许坏一块
RAID6 带奇偶校验条带集双校验 4+ (n-2)/n 读写快,容错,允许坏两块
RAID10 RAID1的安全+RAID0的高速 4 50% 读写速率快,容错
RAID50 RAID5的安全+RAID0的高速 6 (n-2)/n 读写速率快,容错
RAID60 RAID6的安全+RAID0的高速 8 (n-4)/n 读写速率快,容错
一、不同场景RAID的使用
RAID 实现方式
硬RAID: 需要RAID卡,有自己的CPU,处理速度快,有电池和无电池。
软RAID: 通过操作系统实现,比如Windows、Linux
二、RAID5 (3块硬盘) + 热备(1块硬盘)
1. 准备4块硬盘
[root@tianyun ~]# ll /dev/sd*
brw-rw---- 1 root disk 8, 48 Jan 13 16:07 /dev/sdd
brw-rw---- 1 root disk 8, 64 Jan 13 16:07 /dev/sde
brw-rw---- 1 root disk 8, 80 Jan 13 16:07 /dev/sdf
brw-rw---- 1 root disk 8, 80 Jan 13 16:07 /dev/sdg
2. 创建RAID
[root@tianyun ~]# yum -y install mdadm //确保mdadm命令可用
[root@tianyun ~]# mdadm -C /dev/md0 -l5 -n3 -x1 /dev/sd{d,e,f,g}
-C 创建RAID
/dev/md0 第一个RAID设备
-l5 RAID5
-n RAID成员的数量
-x 热备磁盘的数量
可用空间2G
3. 格式化,挂载
[root@tianyun ~]# mkfs.xfs /dev/md0
[root@tianyun ~]# mkdir /mnt/raid5
[root@tianyun ~]# mount /dev/md0 /mnt/raid5
[root@tianyun ~]# cp -rf /etc /mnt/raid5/etc1
4. 查看RAID信息
[root@tianyun ~]# mdadm -D /dev/md0 //-D 查看详细信息
/dev/md0:
Version : 1.2
Creation Time : Mon Jan 13 16:28:47 2016
Raid Level : raid5 //raid类型
Array Size : 2095104 (2046.34 MiB 2145.39 MB)
Used Dev Size : 1047552 (1023.17 MiB 1072.69 MB)
Raid Devices : 3 //组中设备的数量
Total Devices : 4 //总设备数
Persistence : Superblock is persistent
Update Time : Mon Jan 13 16:34:51 2016
State : clean //状态,卫生的,哈哈
Active Devices : 3 //活跃3个
Working Devices : 4 //4个在工作
Failed Devices : 0 //坏了1就危险了,2个就完蛋了
Spare Devices : 1 //热备的1个。
Layout : left-symmetric
Chunk Size : 512K //校验码大小
Number Major Minor RaidDevice State
0 8 48 0 active sync /dev/sdd //同步
1 8 64 1 active sync /dev/sde //同步
4 8 80 2 active sync /dev/sdf //同步
3 8 96 - spare /dev/sdg
- 模拟一块硬盘损坏,并移除
5. 模拟一块硬盘损坏,并移除
终端一:
[root@tianyun ~]# watch -n 0.5 'mdadm -D /dev/md0 | tail' //watch持续查看
终端二:
[root@tianyun ~]# mdadm /dev/md0 -f /dev/sde -r /dev/sde
//模拟坏了并移除
-f --fail
-r --remove
6. 设置RAID开机生效
[root@tianyun ~]# mdadm -D -s
ARRAY /dev/md0 metadata=1.2 name=sxl1.com:0 UUID=c6761621:8878498f:f5be209e
[root@tianyun ~]# mdadm -D -s > /etc/mdadm.conf
参考
重建过程
Update Time : Mon Aug 4 22:47:47 2016
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Rebuild Status : 3% complete
Name : localhost.localdomain:0 (local to host localhost.localdomain)
UUID : 3df9624c:138a5b3e:2f557132:59a43d04
Events : 41
Number Major Minor RaidDevice State
0 252 16 0 active sync /dev/vdb
3 252 64 1 spare rebuilding /dev/vde //正在重建
4 252 48 2 active sync /dev/vdd
命令选项汇总
mdadm选项汇总:
-s --scan
-S --stop
-D --detail
-C --create
-f --fail
-r --remove
-n --raid-devices=3
-x --spare-devices=1
-l --level=5