一,文件系統詳解
1,EXT3/4文件系統
1.1 詳解
1.1.1 類型
索引index文件系統
1.1.2 系統限制
Ext3: 文件系統最大16TB,單個文件最大2TB
Ext4: 文件系統最大16TB,單個文件最大16TB
1.1.3 出處
Red_Hat_Enterprise_Linux-7-7.0_Release_Notes-zh-CN
希望大家課下閱讀該書籍
1.1.4 存儲結構
磁盤>分區>文件系統>塊組>索引目錄>數據塊
原版
中文
1.1.5 名詞解釋
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.2 示例部分
示例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決定了文件存儲的空間。
問題2:當分區空間大小消耗完畢,還能否新增文件?
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
示例4:卷標
更改ext4文件系統的卷標信息(設置標籤)
[root@tianyun ~]# tune2fs -L music /dev/vg1/lv1
2,XFS文件系統
注意:與EXT4修復同理,不可以掛載使用文件系統時修復。
3,FAT文件系統
二,文件鏈接
1,符號鏈接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
總結:軟連接是一個新文件,像快捷方式,可以對文件和目錄做軟連接。
軟連接記錄的只是源文件的絕對路徑。
軟連接失去源文件不可用。
2,硬鏈接
硬鏈接,新的文件入口
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 /home/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(瞭解)
1,簡介
PAID:廉價磁盤冗餘陣列(Redundant Array of Independent Disks)
作用:容錯、提升讀寫速度
2,類型
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 讀寫速率快,容錯
3,不同場景RAID的使用
RAID 實現方式
硬RAID: 需要RAID卡,有自己的CPU,處理速度快,有電池和無電池。
軟RAID: 通過操作系統實現,比如Windows、Linux
4,RAID5(3塊硬盤)+熱備(1塊硬盤)
製作磁盤陣列步驟(重點部分)
4.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
4.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
4.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.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
4.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
4.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
4.7 參考
重建過程
Update Time : Mon Aug 4 22:47:47 2016State : 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