概述:
上篇已經介紹了一些磁盤和文件系統管理的基礎概念,對磁盤的硬件構造,文件系統的基礎概念部分有了一個大致的了解。本篇就分享一些關于磁盤和文件系統管理的一些高級應用,具體包含:
1、swap交換分區的管理
2、掛載移動介質及dd及相關命令的補充
3、磁盤配額的管理
4、RAID管理
5、LVM邏輯卷管理
6、btrfs文件系統管理
7、高級磁盤管理實戰演練
第一章 swap交換分區管理
交換分區是用于當物理內存空間不夠用時,將內存中的數據,按照LSU算法,將最近最少使用的一些數據展示存儲到交換分區里面,充當內存的補充,inux上的交換分區必須使用獨立的文件系統,且文件系統的system ID 必須為82
1、交換分區的創建:
利用fdisk命令,創建一個分區,并將分區類型修改為82,也就是swap類型,出于讀寫速度考慮,建議將交換分區創建為一個獨立磁盤的起始柱面開始的分區(一般為第一個分區),因為按照磁盤物理結構來看,起始柱面處于盤片的最外圈,讀寫速率相對較高
2、格式化交換分區
創建了交換分區之后,可利用mkswap命令來創建文件系統,格式為:mkswap DEVICE
3、啟用禁用交換分區
啟用: swapon
swapon [OPTION]… [DEVICE]
-a:激活所有的交換分區,實際是去讀/etc/fstab文件
-s 顯示swap的分區狀況
-p PRIORITY:指定優先級
禁用:swapoff /DEVICE
4、掛載交換分區,讓交換分區能夠開啟自動掛載
編輯/etc/fstab文件添加關于swap分區的掛載條目
5、管理交換分區
交換分區的優先級:
用戶可以給某個swap指定一個0到32767的優先級
如果用戶沒有指定,那么核心會自動給swap指定一個優先級,這個優先級從-1開始,每加入一個新的沒有用戶指定優先級的swap,會給這個優先級減一。
先添加的swap的缺省優先級比較高,除非用戶自己指定一個優先級,而用戶指定的優先級(是正數)永遠高于核心缺省指定的優先級(是負數)。
調整swap優先級的方法:
1、 在swapon -p 指定優先級(重啟后失效)
2、 在fstab中默認掛載選項中定義pri=優先級(永久有效,要想立即生效,需要swapoff,然后再swapon)
6、利用文件(而不是分區)當做交換分區使用
先創建一個合適大小的文件,然后mkswap格式化為swap的文件系統,然后啟用之
也支持將配置寫入/etc/fstab文件,讓其自動掛載,只是掛載選項那里注意要加上loop選項
第二章 掛載移動介質和dd及相關命令補充
1、移動介質掛載使用(光盤、U盤)
掛載意味著使外來的文件系統看起來如同是主目錄樹的一部分
訪問前、介質必須被掛載
摘除時,介質必須被卸載
按照默認設置,非根用戶只能掛載某些設備(光盤、 DVD、軟盤、 USB等等)掛載點通常在/media 或/mnt下
光盤:
手工掛載,如:mount /dev/cdrom /mnt/
eject命令卸載或彈出磁盤
創建ISO文件,如:
cp /dev/cdrom /root/centos7.iso
mkisofs -r -o /root/etc.iso /etc
刻錄光盤
wodim –v –eject centos.iso
USB介質:
被內核探測為SCSI設備,/dev/sdaX、 /dev/sdbX、或類似的設備文件
手動掛載:mount /dev/sdb1 /mnt
2、dd命令詳解
dd命令:convert and copy a file
用法:
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
bs=#: block size, 復制單元大小
count=#:復制多少個bs
of=file 寫到所命名的文件而不是到標準輸出
if=file 從所命名文件讀取而不是從標準輸入
bs=size 指定塊大?。仁鞘莍bs也是obs)
ibs=size 一次讀size個byte
obs=size 一次寫size個byte
cbs=size 一次轉化size個byte
skip=blocks 從開頭忽略blocks個ibs大小的塊
seek=blocks 從開頭忽略blocks個obs大小的塊
conv=conversion[,conversion…] 用指定的參數轉換文件
轉換參數:
block 轉換為長度為 cbs 的記錄,不足部分用空格填充。
unblock 替代cbs長度的每一行尾的空格為新行
lcase 把大寫字符轉換為小寫字符
ucase 把小寫字符轉換為大寫字符
swab 交換輸入的每對字節。
nocreat 輸出的文件不存在,不默認創建
noerror 出錯時不停止
notrunc 不截短輸出文件。
sync 把每個輸入塊填充到ibs個字節,不足部分用空(NUL)字符補齊
用法示例:
磁盤拷貝:dd if=/dev/sda of=/dev/sdb
備份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
備份:
dd if=/dev/sdx of=/dev/sdy
將本地的/dev/sdx整盤備份到/dev/sdy
dd if=/dev/sdx of=/path/to/image
將/dev/sdx全盤數據備份到指定路徑的image文件
dd if=/dev/sdx | gzip >/path/to/image.gz
備份/dev/sdx全盤數據,并利用gzip工具進行壓縮,保存到指定路徑
恢復:
dd if=/path/to/image of=/dev/sdx
將備份文件恢復到指定盤
gzip -dc /path/to/image.gz | dd of=/dev/sdx
將壓縮的備份文件恢復到指定盤
拷貝內存資料到硬盤
dd if=/dev/mem of=/root/mem.bin bs=1024
將內存里的數據拷貝到root目錄下的mem.bin文件
從光盤拷貝iso鏡像
dd if=/dev/cdrom of=/root/cd.iso
拷貝光盤數據到root文件夾下,并保存為cd.iso文件
銷毀磁盤數據
dd if=/dev/urandom of=/dev/sda1
利用隨機的數據填充硬盤,在某些必要的場合可以用來銷毀數據。執行此操作以后, /dev/sda1將無法掛載,創建和拷貝操作無法執行。
得到最恰當的block size
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
通過比較dd指令輸出中所顯示的命令執行時間,即可確定系統最佳的block size大小
測試硬盤讀寫速度
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
通過上兩個命令輸出的執行時間,可以計算出測試硬盤的讀/寫速度
修復硬盤
dd if=/dev/sda of=/dev/sda
當硬盤較長時間(比如1, 2年)放置不使用后,磁盤上會產生消磁點。當磁頭讀到這些區域時會遇到困難,并可能導致I/O錯誤。當這種情況影響到硬盤的第一個扇區時,可能導致硬盤報廢。上邊的命令有可能使這些數據起死回生。且這個過程是安全,高效的。
3、磁盤管理其他相關命令
內存空間使用狀態:
free [OPTION]
-m: 以MB為單位
-g: 以GB為單位
文件系統空間占用等信息的查看工具:
df [OPTION]… [FILE]…
-H 以1000為單位
-T 文件系統類型
-h: human-readable
-i:不以塊顯示磁盤空間占用情況,而是以inode的數量顯示占用情況
-P: 以Posix兼容的格式輸出
查看某目錄總體空間占用狀態:顯示出來默認是K為單位
du [OPTION]… DIR
-h: human-readable
-s: summary
du -sh /* 顯示根下每個目錄的大小
第三章 磁盤配額的管理
Linux是多用戶的操作系統,同一時間可能有多個用戶登錄到系統上進行相關操作,用戶在操作的時候,可能會寫入很多數據,占用大量磁盤空間,導致其他用戶想寫數據的時候,沒有磁盤空間可用,如何限定某個用戶對磁盤的使用空間大小,以及可使用的inode多少,也就是限定可創建多少個文件,這就是磁盤配額管理的作用。
磁盤配額管理的是針對一個獨立的分區文件系統進行管理,不能跨分區,如果我們希望對某個目錄進行磁盤配額管理,則需要將該目錄單獨掛載至某個獨立的分區
磁盤配額管理的設定流程:
1、啟用分區掛載選項usrquota、grpquota,根據需要,只針對用戶啟用或只針對組啟用,也可以兩個都啟用
注意修改掛載選項后執行重新掛載
2、初始化quota數據庫
quotacheck -cu|-cg|-cug /DIR
針對某個分區的掛載目錄初始化quota數據庫,可以針對用戶創建、針對組創建、或者兩個都創建,看第一步掛載選項啟用的那些都創建那些
初始化數據塊后,會在被執行磁盤配額的目錄下生成相關的數據庫文件,該文件無法通過vi等編輯器查看
3、啟用磁盤配額功能
quotaon /DIR
關閉用 quotaoff
quotaon -p /DIR 查看某目錄磁盤配額是否啟用
4、編輯具體配額信息
edquota USERNAME 進入交互式界面定義配額
或setquota USERNAME 軟容量 硬容量 軟數量 硬數量 /DIR
或根據現有用戶的配置來設置別的用戶
edquota -p USER1 USER2 根據user1設置user2
5、驗證配額情況
quota USERNAME 查看某用戶配額信息
repquota /DIR 查看掛載點的整體配額信息
quotaon -p /DIR 查看某目錄磁盤配額是否啟用
第四章 RAID管理
1、RAID概述:
多個磁盤合成一個“陣列”來提供更好的性能、冗余,或者兩者都提供
提高IO能力:磁盤并行讀寫
提高耐用性;磁盤冗余來實現
RAID級別:多塊磁盤組織在一起的工作方式有所不同
RAID實現的方式:
外接式磁盤陣列:通過擴展卡提供適配能力
內接式RAID:主板集成RAID控制器,安裝OS前在BIOS里配置
Software RAID:利用軟件實現RAID功能
2、常見RAID級別及其相關屬性
RAID的級別僅僅代表磁盤組織方式的不同,不代表先進性
0:代表條帶技術(一份分成多分存儲,提升讀寫速率)
性能表現:讀寫性能提升
冗余能力(容錯能力):無
空間利用率:n倍,每個raid0存儲量取決于幾塊盤中最小的容量
至少2塊盤
1:代表鏡像技術(一份復制多分存儲,提升容錯率)
性能表現:寫下降,讀提升
冗余能力:有
空間利用率:1/2,每個raid1存儲量取決于幾塊盤中最小的容量
至少2塊盤
5:校驗碼技術
性能表現:讀寫提升
冗余能力:有,只能同時壞一塊盤
空間利用率:(n-1)/n,每個raid5存儲量取決于幾塊盤中最小的容量
至少3塊盤
01:先做0,后做1
性能表現:讀寫提升
冗余能力:有
空間利用率:1/2
至少4塊盤
10:先做1,后做0;實際公司一般用這種,實用性比01好(底層是1,上層是0)
性能表現:讀寫提升
冗余能力:有,每組鏡像對多只能壞一塊
空間利用率:1/2,每個raid10存儲量取決于幾塊盤中最小的容量
至少4塊盤
50:
性能表現:讀寫提升
冗余能力:有
空間利用率:(n-2)/2
至少6塊盤
JBOD技術:將多塊盤組成一個大的盤,不提升讀寫速率,不提供冗余
常用級別:raid-0,raid-1,raid5,raid10,raid50,JBOD
3、軟件RAID的實現:mdadm (實際效果演示見本文第七章)
md:(內核中支持軟件RAID的模塊)
mdadm:模式化的工具,支持的RAID級別:LINEAR, RAID0, RAID1, RAID4,RAID5, RAID6, RAID10
將任何塊設備做成RAID,支持將磁盤的某個分區、也支持整個磁盤創建為RAID設備,利用分區創建的時候,需要將分區類型修改為fd,利用整個磁盤創建時,則直接指定磁盤即可
語法:命令的語法格式: mdadm [mode] <raiddevice> [options] <component-devices>
模式mode:
創建: -C(注意在同一個磁盤上的不同分區創建是沒有意義的,因為RAID本身是為了防止物理損壞,而創建在同一個磁盤上的不同分區,磁盤壞了,RAID的各個分區也壞了)
裝配: -A
監控: -F
管理: -f, -r, -a
<raiddevice>: /dev/md#
<component-devices>: 任意塊設備
創建模式-C:
-n #: 使用#個塊設備來創建此RAID
-l #:指明要創建的RAID的級別
-a {yes|no}:自動創建目標RAID設備的設備文件
-c CHUNK_SIZE: 指明塊大小,2^n,單位K,默認為512K
-x #: 指明空閑盤的個數
例如:創建一個10G可用空間的RAID5
mdadm -C /dev/md1 -n 3 -x 1 -l 5 -a yes /dev/sd{b,c,d,e}1
顯示RAID的詳細信息:mdadm -D /dev/md#
觀察RAID的狀態:cat /proc/mdstat
創建好raid設備后,要利用mdadm -Ds >> /etc/mdadm.conf 保存到配置文件,否則下次啟動或利用mdadm -A裝配時,會找不到raid設備
管理模式:
-f: 標記指定磁盤為損壞
-a: 添加磁盤
-r: 移除磁盤
停止RAID設備:
mdadm -S /dev/md#
軟RAID管理:
生成配置文件: mdadm –D –s >> /etc/mdadm.conf
激活: mdadm –A –s /dev/md0 激活
注意,停止想激活,前提是生成過配置文件
刪除raid信息: mdadm –zero-superblock /dev/sdb1
增長模式:當創建某raid時,指定的磁盤個數為N,后面想增加磁盤個數時用到此模式
mdadm –G /dev/md0 –n4 -a /dev/sdf1
注意:
raid創建完成后,如果用UUID掛載,則需要用blkid看到的UUID進行掛載,而不應該用mdadm -D /dev/md0看到的UUID
停止RAID后,如果發現分區沒有被清除干凈,需要用mdadm –zero-superblock /dev/sdb1將每個分區信息刪除
總結:
創建RAID過程:
1、fdisk創建分區,修改類型為fd
2、創建raid設備: mdadm -C /dev/md# -n 設備個數 -x 空閑盤個數 -l RAID級別 -c CHUNK大小 -a yes /DEVICES…
3、如果有必要,將raid信息導出:mdadm -Ds >> /etc/mdadm.conf
4、格式化創建文件系統:mke2fs -t FILESYSTEM_TYPE /dev/md#
5、掛載:mount /dev/md# /MOUNT_POINT
6、掛載寫入配置文件,實現自動掛載 vim /etc/fstab
注意,要用blkid查看到的UUID進行掛載,因為重啟后raid設備名稱會發生變更
測試:
1、手工損壞某個磁盤:mdadm /dev/md# -f /DEVICE
2、觀察md設備的狀態:cat /proc/mdstat 或 mdadm -D /dev/md#
3、移除認為損壞的設備,添加新的設備
mdadm /dev/md# -r /DEVICE
mdadm /dev/md# -a /DEVICE
4、增加raid設備的磁盤數量(增長模式)
mdadm -G /dev/md# -n # -a /DEVICE
-n指定要增長到幾塊磁盤,-a指定增加進去的磁盤
5、停用RAID設備:
mdadm -S /dev/md#
6、重新啟用之前停用的RAID設備(前提是導出過配置文件)
mdadm -As /dev/md#
完全刪除停止raid設備:
1、停用RAID設備:mdadm -S /dev/md#
2、刪除保存過的RAID配置文件:rm -f /etc/mdadm.conf
3、刪除創建過RAID分區:fdisk 命令
4、如果發現無法完全刪除分區信息,利用mdadm –zero-superblock /DEVICE 將每個分區信息刪除
第五章 LVM邏輯卷管理
1、LVM的基礎概念
可以基于任何塊設備,包括磁盤的某個分區,或整個磁盤,甚至包括raid設備來創建
dm:device mapper 將一個或多個底層塊設備組織成一個邏輯設備的模塊
創建后的設備文件是:/dev/dm-#
由于以上的表達方式不方便記憶和調用,故有/dev/VG_NAME/LV_NAME和/dev/mapper/VG_NAME-LV_NAME這兩個鏈接文件指向了真實文件
PV:(physical volume物理卷):提供物理空間的磁盤或分區
PE:(physical extend 物理盤區):類似塊的概念
VG:(volume group 卷組):類似擴展分區的概念
LV:(logical volume 邏輯卷):真正提供訪問的邏輯空間
LE:(logical extend 邏輯盤區):PE映射到LV上面的就叫LE
2、PV管理工具,利用分區創建pv時,需要將分區類型改為8e
PV管理工具:(pv只有在加入vg后才能會有PE塊大小,才能進行分配)
pvs 簡要顯示pv信息
pvdisplay [DEVICE] 顯示指定塊設備的pv詳細信息,不指定默認顯示全部pv信息
pvcreate /dev/DEVICE 將指定的設備創建為pv
例如:pvcreate /dev/sda3 /dev/sdb
pvremove /dev/DEVICE 將指定的設備從pv中移除
pvmove /dev/DEVICE 當縮減VG大小時,需要先將被縮減的設備上的文件移動到同一個VG上面的其他設備上,此時需要用pvmove來實現數據的轉移
4、VG管理工具
vgs 簡要顯示vg信息
vgdisplay [VG_NAME] 顯示指定VG的詳細信息,不指定默認顯示全部的VG信息
vgcreate [-s PE_SIZE] VG_NAME /dev/DEVICE…
-s PE_SIZE 指定PE大小,單位可以有KMGT…默認為4M,PE的大小一旦vg創建完成就不能更改
/dev/DEVICE 指定用哪個PV設備創建該VG
例如:vgcreat -s 2M myvg /dev/sda3
vgextend VG_NAME /dev/DEVICE 將指定的pv設備加入到vg
例如:
pvcreate /dev/sda5
vgextend myvg /dev/sda5
vgreduce VG_NAME /dev/DEVICE 將指定的pv設備從vg移除,移除pv前要先將pv的數據移走,然后再從vg中移除該pv
例如:
pvmove /dev/sda5
vgreduce myvg /dev/sda5
注意:移除pv時,要將pv上的數據移動到改vg組內的其他pv上
vgremove VG_NAME 移除指定的整個VG
5、LV管理工具:
lvs 簡要顯示lv信息
lvdisplay [/dev/VG_NAME/LV_NAME] 顯示指定lv的詳細信息,不指定則默認顯示全部lv的信息
lvcreate [OPTION]… -n LV_NAME VG_NAME
-L SIZE :指明lv的大小,支持的單位MGT等;指明的大小在指明的VG中有足夠的空間分配
-n LV_NAME 指明lv的名稱
VG_NAME 指明在哪個VG上創建
例如:lvcreate -L 2G -n mylv myvg
創建完成lv后,設備文件名一般是/dev/VG_NAME/LV_NAME
lvremove /dev/VG_NAME/LV_NAME 可以實現刪除指定的lv
擴展LV:(先擴展物理邊界,也就是lv,再擴展邏輯邊界 resize2fs)支持在線擴展
lvextend -L [+]SIZE /dev/VG_NAME/LV_NAME
-L [+]SIZE 指明擴展多大的空間,可以是MGT等
-L SIZE 表示增加到多大,表示lv的總的空間大小
-L +SIZE 表示在原有基礎上增加多少
例如:lvextend -L +5G /dev/myvg/mylv
注意:擴展完成lv大小后,只是擴展了物理上的存儲大小,但是文件系統的大小還是沒有改變,所以在擴展完lv大小后,要重置指定分區的文件系統大小,方法如下:(實際是擴展邏輯邊界)
resize2fs /dev/myvg/mylv (該命令只適用于ext系列文件系統)
注意:
擴展lv時,如果文件系統是xfs時,不能用resize2fs(專用用ext系列) ,而要用xfs_growfs /dev/VG_NAME/LV_NAME
擴展時如果使用的lvextend -r -l 100%FREE /dev/nwc_vg/nwc_lv 表示將剩余空間全部擴展,則不需要進行文件系統邊界擴展,也就是不需要執行resize2fs
xfs文件系統只能擴展,不能縮減,但ext系列的可以擴展,也可以縮減
縮減LV:(縮減不能在線進行,縮減lv要先卸載,先縮減邏輯邊界,也就是文件系統邊界,再縮減物理邊界,也就是lv)縮減LV有丟失數據風險,需要謹慎
umount /dev/VG_NAME/LV_NAME 卸載
e2fsck -f /dev/VG_NAME/LV_NAME 強制檢查文件系統
resize2fs /dev/VG_NAME/LV_NAME SIZE 縮減邏輯邊界至多大,單位MGT等
如:resize2fs /dev/myvg/mylv 3G
lvreduce -L [-]SIZE /dev/VG_NAME/LV_NAME 縮減物理lv大小
-L SIZE 表示縮減到多大
-L -SIZE 表示在原有基礎上縮減多少
mount /dev/VG_NAME/LV_NAME /DIR 縮減完成,重新掛載
注意:縮減LV有丟失數據風險,需要謹慎
當lv創建完成后,需要進行格式化創建文件系統,并掛載,才能使用
例如:
mke2fs -t ext4 -b 1024 -L LVTEST -o acl /dev/myvg/mylv
mount /dev/myvg/mylv /testdir/lvdir
6、快照卷
<1>快照卷原理:
快照卷是對處于同一個vg下的lv創建一個快照邏輯卷,目的是為了對某個lv的數據進行備份,快照卷與邏輯卷一定要處于同一卷組,在創建完快照卷后,如果邏輯卷內的內容發生變化,則會把原始為發生變化的數據存放到快照卷中,這樣就保證了快照卷中的內容都處于創建快照卷那一刻的數據的狀態,然后對快照卷內的內容用copy或其他備份方式進行備份,這樣就實現了數據的備份。
雖然我們說快照卷內的內容都是創建快照卷之后,邏輯卷中變化過的內容,但是在實際操作的過程中,會發現即使邏輯卷的數據沒有發生變化,但切換到快照卷的掛載目錄時,仍然能夠看到有與邏輯卷內的數據一樣的內容。其實,對于那些沒有變化的數據,快照卷內看到的文件的存儲位置依然是在邏輯卷內,為了起到備份的效果,映射到了快照卷內。但是對于創建快照卷之后,發生變化的數據,則原始數據會存儲在快照卷的存儲空間內,而變化后的數據存儲在了邏輯卷的存儲空間內。如此,即保證了快照卷的數據即是創建快照卷那一刻文件的狀態。
通過上述快照卷的實現方式,可以得知,快照卷的大小,只需要保證從快照卷創建,到備份快照卷里面的數據這段時間內,原始數據可能發生變化的數據的大小,最大即為跟原始邏輯卷一樣大。
<2>創建快照卷:
lvcreate -L SIZE -p r -s -n SNAPSHOT_NAME ORIGINAL_LV_NAME
-L SIZE 指明快照卷的大小(在做備份這段時間可能發生的改變的數據量),可接受的單位是MGT等
-p r 表示快照卷的屬性是只讀,一般快照卷用來做備份,備份過程中,快照卷不允許可寫
-s 標明是在做快照卷
-n SNAPSHOT_NAME 標明快照卷的名稱
ORIGINAL_LV_NAME 標明是對那個原卷做快照,如/dev/myvg/mylv
例如:對之前的mylv做快照
lvreate -L 2G -p r -s -n mysnap /dev/myvg/mylv
<3>快照卷的掛載使用
創建完快照卷,需要掛載才能使用
mount /dev/myvg/mysnap /testdir/testsnap
比如原卷掛載在/backup中,snap掛載在/testdir/testsnap下,一旦快照卷創建完成,在原卷的掛載點中改變的文件,在快照卷的掛載點中是不會有的,此時就可以利用快照卷的掛載點里面的內容做備份了,如
cp -pa /testdir/snapdir /nwc/back
備份完成后,快照卷的使命完成,就可以卸載并刪除快照卷了
umount /testdir/snapdir
lvremove /dev/myvg/mysnap
第六章 btrfs文件系統管理
1、btrfs核心特性:
多物理卷支持:一個文件系統,可以由多個底層物理卷組成,支持RAID,支持以聯機“增加”“修改”“刪除”
寫時復制更新機制(CoW):復制、更新及替換指針,而非“就地”更新
數據及元數據校驗碼機制:checksum
子卷:sub_volume
快照:支持快照的快照,增量快照機制
透明壓縮機制
2、創建btrfs文件系統:mkfs.btrfs(一般在多塊磁盤上創建btrfs,而不是在一塊磁盤的不同分區上創建)
格式:mkfs.btrfs [OPTIONS] DEVICE
-L LABEL 指定卷標
-m raid0|raid1|raid5|raid10|single|dup 指明元數據存儲方式,由于btrfs底層默認支持raid,故可以定義元數據的存儲方式,是raid還是只存儲一份,還是做冗余存儲,默認是single
-d raid0|raid1|raid5|raid10|single 指明數據存儲方式,由于btrfs底層默認支持raid,故可以定義數據的存儲方式,是raid還是只存儲一份,默認是single
-O FEATURE1,FEATURE2… 指明創建文件系統時時,默認開啟哪些特性,可利用mkfs.btrfs -O list-all來查看支持的特性列表
例如:mkfs.btrfs -L MyBtrfsTest /dev/sdb /dev/sdc
btrfs filesystem show 可以查看當前系統上的btrfs文件系統的信息
3、查看btrfs文件系統:btrfs filesystem
格式:btrfs filesystem <subcommand> <args>
subcommand:
df /PATH 顯示btrfs文件系統中掛載點的空間占用情況
show [–mounted|–all-devices|PATH|UUID|DEVICE|LABEL] 顯示指定的文件系統相關信息,如已掛載的信息,所有設備的信息等,默認不指名,則顯示所有的
label /DEVICE [NEWLABEL] 顯示或修改設備的卷標,不加NEWLABEL則為顯示,如果指明NEWLABEL則為修改
resize DEVICE:SIZE 可實現調整文件系統大小,支持的單位有KMG
查看時,如果指明DEVICE,則指明創建文件系統時的任何一個設備都可以,因為他們都屬于同一個文件系統
例如:btrfs filesystem show
btrfs filesystem resize -10G /testdir/btrfstest
btrfs filesystem resize +10G /testdir/btrfstest
btrfs filesystem resize max /testdir/btrfstest
btrfs filesystem df /testdir/btrfstest
4、掛載btrfs文件系統:mount
mount -t btrfs DEVICE /MOUNT_POINT
DEVICE:為任意一個創建文件系統時的設備
例如:mount -t btrfs /dev/sdb /testdir/btrfstest
可利用掛載選項,啟用btrfs透明壓縮機制:
mount -o compress={lzo|zlib} /dev/sdb /testdir/btrfstest
5、添加刪除底層磁盤進btrfs文件系統:btrfs device
格式:btrfs device <subcommand> <args>
subcommand:
add 添加一塊設備到btrfs,支持在線進行
delete 從btrfs里面刪除設備,支持在線進行
scan 掃描設備
ready 將設備標記為可用狀態
stats
例如:btrfs device add /dev/sdd /testdir/btrfstest
btrfs device delete /dev/sdb /testdir/btrfstest
6、將btrfs的底層設備均衡存儲數據:btrfs balance
格式: btrfs balance <subcommand>|<args>
subcommand:
start :啟動均衡存儲
stop :停止均衡存儲
status :查看均衡存儲的狀態信息
pause :暫停均衡存儲
resume :繼續實施均衡存儲
例如:btrfs balance start /testdir/btrfstest
7、修改元數據和數據存儲的組織方式:(mkfs.btrfs里面-m和-d的相關信息的修改)
語法:btrfs balance start {-d|-m|-s}convert=FILTER /MOUNT_POINT
-d 表示修改數據的存儲組織方式,支持在線進行
-m 表示修改元數據的存儲組織方式,支持在線進行
-s 表示修改系統存儲的組織方式,支持在線進行
FILTER:
raid0、raid1、raid5、raid10、single、dup
改變raid級別時,前提要有對應的多少塊磁盤,raid0 2塊,raid1 2塊,raid5 3塊,raid10 4塊
例如:btrfs balance start -dconvert=raid5 /testdir/btrfstest
8、在btrfs上管理子卷:btrfs subvolume
可理解為在現有的btrfs上在創建一個btrfs文件系統,單獨掛載使用
格式:btrfs subvolume <subcommand> [args]
subcommand:
create:創建子卷
btrfs subvolume create /testdir/btrfstest/subdir
相當于在父卷掛載點上創建一個子目錄
上述例子表示創建一個名為subdir的子卷
list:列出子卷
btrfs subvolume list /testdir/btrfstest
snapshot:做快照
set-default:設置默認子卷
get-default:查看默認子卷
掛載子卷:
當掛載時,如果指明的是父卷的掛載路徑,則父卷下屬的所有子卷都會被自動掛載,訪問時通過父卷的掛載點下的對應子目錄進行訪問,如果要單獨掛載某些子卷,則創建完子卷后,卸載父卷,然后再掛載子卷
如果掛載父卷,則所有子卷下的內容都能被訪問到,但是如果單獨掛載子卷,則父卷上的內容就沒辦法正常訪問
mount -o subvol=SUBVOLUME_NAME /DEVICE /MOUNT_POINT
/DEVICE :創建父卷時的任意一個設備都可以
/MOUNT_POINT: 掛載點不需與父卷在相同目錄下
例如:mount -o subvol=subdir /dev/sdc /mnt/test
查看子卷的詳細信息:
show:查看給定子卷的詳細信息
btrfs subvolume show /SUB_MOUNT_POINT
例如:btrfs subvolume show /mnt/test
刪除子卷:刪除子卷后,子卷上的數據就不能訪問了
前提是要掛載父卷之后,才能刪除子卷
例如:btrfs subvolume delete /testdir/btrfstest/subdir
對子卷創建快照:
創建快照卷的時候,需要快照卷與子卷在同一個父卷下
例如:btrfs subvolume snapshot /testdir/btrfstest/subdir /testdir/btrfstest/subdir_snapshot
表示對/testdir/btrfstest/subdir,也就是subdir子卷,創建一個名為subdir_snapshot的快照卷
當備份完成后,就可以刪除快照卷了
btrfs subvolume delete /testdir/btrfstest/subdir_snapshot
9、在btrfs文件系統上,對單個文件創建快照
創建的位置最好在當前卷下屬的某個路徑上
例如:卷下有個文件是test.txt,對該文件創建快照
cp –reflink test.txt test.txt_snap
10、如何將ext4或ext3文件系統轉換成btrfs(不影響原有數據的情況下)
<1>先將需要轉的ext文件系統umount,假設為/dev/sdc1
<2>強制檢查文件系統,fsck -f /dev/sdc1
<3>轉換btrfs-convert /dev/sdc1
<4>然后就可以利用 btrfs filesystem show來查看是否已經轉換成功
<5>最后,正常進行掛載使用 mount /dev/sdc1 /test
<6>正常使用原有文件
11、將轉換后的btrfs再換回ext4文件系統
btrfs-convert -r /dev/sdc1
再掛載,即可使用
第七章 高級磁盤管理實戰演練
1、寫一個腳本,完成如下功能:
(1) 列出當前系統識別到的所有磁盤設備
(2) 如磁盤數量為1,則顯示其空間使用信息
否則,則顯示最后一個磁盤上的空間使用信息
#!/bin/bash # Autor: nwc # Version: 2.0 # CreateTime: 2016-08-24 # Description: disks=(`lsblk|grep -o "^sd[a-z]"|sort`) echo -e "\033[35msystem disk list is : ${disks[@]}\033[0m" i=$[${#disks[@]}-1] fdisk -l /dev/${disks[$i]}
執行效果如下:
2、創建一個可用空間為1G的RAID1設備,文件系統為ext4,有一個空閑盤,開機可自動掛載至/backup目錄
步驟:
<1>fdisk創建三個大小為1G的分區,修改分區類型為fd,過程略過,結果如下
<2>利用mdadm -C /dev/md2 -n 2 -x 1 -l 1 -a yes /dev/sd{b,c,d}1
<3>導出raid配置文件
<4>格式化創建文件系統
<5>掛載,寫入/etc/fstab,注意要使用blkid看到的UUID進行掛載
3、創建由三塊硬盤組成的可用空間為2G的RAID5設備,要求其chunk大小為256k,文件系統為ext4,開機可自動掛載至/mydata目錄
步驟:
<1>fdisk創建3個1G的磁盤,更改分區格式為fd,過程略過,效果如下:
<2>mdadm -C /dev/md5 -n 3 -l 5 -c 256 -a yes /dev/sd{b,c,d}1 創建raid設備
<3>導出raid的配置文件,放置系統重啟或停止raid后重載raid時無法識別
<4>格式化文件系統
<5>編輯開機自動掛載配置文件,實現自動掛載,注意用blkid識別到的UUID進行掛載
4、創建和擴展邏輯卷
環境:centos6.8,利用sdb1和sdc一個分區,一個完成的磁盤組建pv
步驟:
<1>利用fdisk對sdb進行分區,將分區類型改為8e
<2>創建pv
<3>創建vg
<4>創建lv
<5>格式化創建文件系統
<6>掛載使用
<7>擴展邏輯卷(支持在線擴展,確保vg里面有空間供lv擴展,否則就要加pv,擴展vg再擴展lv)
先擴展邏輯卷大小
再擴展邏輯卷上文件系統大小
5、創建一個至少有兩個PV組成的大小為20G的名為testvg的VG;要求PE大小為16MB, 而后在卷組中創建大小為5G的邏輯卷testlv;掛載至/users目錄
[root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 1024M 0 rom sdb 8:16 0 20G 0 disk └─sdb1 8:17 0 5G 0 part sda 8:0 0 20G 0 disk ├─sda1 8:1 0 200M 0 part /boot ├─sda2 8:2 0 2G 0 part /home ├─sda3 8:3 0 2G 0 part /var ├─sda4 8:4 0 1K 0 part ├─sda5 8:5 0 1000M 0 part [SWAP] └─sda6 8:6 0 14.9G 0 part / sdd 8:48 0 10G 0 disk sdc 8:32 0 10G 0 disk sde 8:64 0 10G 0 disk [root@localhost ~]# [root@localhost ~]# pvcreate /dev/sd{c,d} //利用sdc、sdd兩塊磁盤做pv,如果用分區,需要改分區類型為8e Physical volume "/dev/sdc" successfully created Physical volume "/dev/sdd" successfully created [root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdc lvm2 ---- 10.00g 10.00g /dev/sdd lvm2 ---- 10.00g 10.00g [root@localhost ~]# vgcreate -s 16M testvg /dev/sdc /dev/sdd //創建vg,指定PE大小為16M Volume group "testvg" successfully created [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree testvg 2 0 0 wz--n- 19.97g 19.97g [root@localhost ~]# vgdisplay --- Volume group --- VG Name testvg System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 2 Act PV 2 VG Size 19.97 GiB PE Size 16.00 MiB Total PE 1278 Alloc PE / Size 320 / 5.00 GiB Free PE / Size 958 / 14.97 GiB VG UUID K2QPzO-Vp6T-DeIV-PWqS-9soO-uSKA-ooc9eN [root@localhost ~]# lvcreate -L 5G -n testlv testvg //創建lv,大小為5G Logical volume "testlv" created. [root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert testlv testvg -wi-a----- 5.00g [root@localhost ~]# mkdir /testdir/users [root@localhost ~]# mke2fs -t ext4 -L "TESTLV" /dev/testvg/testlv //格式化lv創建文件系統 mke2fs 1.41.12 (17-May-2010) 文件系統標簽=TESTLV 操作系統:Linux 塊大小=4096 (log=2) 分塊大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 327680 inodes, 1310720 blocks 65536 blocks (5.00%) reserved for the super user 第一個數據塊=0 Maximum filesystem blocks=1342177280 40 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736 正在寫入inode表: 完成 Creating journal (32768 blocks): 完成 Writing superblocks and filesystem accounting information: 完成 This filesystem will be automatically checked every 21 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. [root@localhost ~]# mount /dev/testvg/testlv /testdir/users/ //掛載 [root@localhost ~]# df -h //驗證是否掛載成功 Filesystem Size Used Avail Use% Mounted on /dev/sda6 15G 2.9G 11G 21% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 190M 33M 147M 19% /boot /dev/sda2 1.9G 62M 1.8G 4% /home /dev/sda3 1.9G 191M 1.7G 11% /var /dev/mapper/testvg-testlv 4.8G 10M 4.6G 1% /testdir/users [root@localhost ~]#
6、新建用戶archlinux,要求其家目錄為/users/archlinux,而后su切換至archlinux用戶,復制/etc/pam.d目錄至自己的家目錄
[root@localhost ~]# useradd archlinux -d /testdir/users/archlinux //創建用戶,指定家目錄 [root@localhost ~]# tail -1 /etc/passwd archlinux:x:516:4336::/testdir/users/archlinux:/bin/bash [root@localhost ~]# su - archlinux [archlinux@localhost ~]$ cp -r /etc/pam.d . [archlinux@localhost ~]$ ls pam.d [archlinux@localhost ~]$ ls -a . .. .bash_logout .bash_profile .bashrc .gnome2 pam.d [archlinux@localhost ~]$
7、擴展testlv至7G,要求archlinux用戶的文件不能丟失
[root@localhost ~]# lvextend -L 7G /dev/testvg/testlv //擴展lv大小 Size of logical volume testvg/testlv changed from 5.00 GiB (320 extents) to 7.00 GiB (448 extents). Logical volume testlv successfully resized. [root@localhost ~]# resize2fs /dev/testvg/testlv //擴展文件系統大小 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/testvg/testlv is mounted on /testdir/users; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/testvg/testlv to 1835008 (4k) blocks. The filesystem on /dev/testvg/testlv is now 1835008 blocks long. [root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda6 15G 2.9G 11G 21% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 190M 33M 147M 19% /boot /dev/sda2 1.9G 62M 1.8G 4% /home /dev/sda3 1.9G 191M 1.7G 11% /var /dev/mapper/testvg-testlv 6.8G 12M 6.5G 1% /testdir/users [root@localhost ~]# su - archlinux //驗證文件是否被破壞 [archlinux@localhost ~]$ ls -a . .bash_history .bash_profile .gnome2 .. .bash_logout .bashrc pam.d [archlinux@localhost ~]$
8、收縮testlv至3G,要求archlinux用戶的文件不能丟失
[root@localhost ~]# du -sh /testdir/users/ //驗證掛載目錄的大小是否小于希望縮減到的大小 192K /testdir/users/ [root@localhost ~]# cp -a /testdir/users/ /backup/ //縮減lv時,建議先將lv里面的內容進行備份 [root@localhost ~]# ls -a /backup/users/archlinux/ . .bash_history .bash_profile .gnome2 .. .bash_logout .bashrc pam.d [root@localhost ~]# umount /dev/testvg/testlv //卸載,縮減lv必須先卸載 [root@localhost ~]# fsck -f /dev/testvg/testlv //強制檢查,縮減lv必須強制檢查文件系統 fsck from util-linux-ng 2.17.2 e2fsck 1.41.12 (17-May-2010) 第一步: 檢查inode,塊,和大小 第二步: 檢查目錄結構 第3步: 檢查目錄連接性 Pass 4: Checking reference counts 第5步: 檢查簇概要信息 TESTLV: 59/458752 files (0.0% non-contiguous), 64490/1835008 blocks [root@localhost ~]# resize2fs /dev/testvg/testlv 3G //縮減文件系統大小 resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/testvg/testlv to 786432 (4k) blocks. The filesystem on /dev/testvg/testlv is now 786432 blocks long. [root@localhost ~]# lvreduce -L 3G /dev/testvg/testlv //縮減lv大小 WARNING: Reducing active logical volume to 3.00 GiB. THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce testvg/testlv? [y/n]: y Size of logical volume testvg/testlv changed from 7.00 GiB (448 extents) to 3.00 GiB (192 extents). Logical volume testlv successfully resized. [root@localhost ~]# mount /dev/testvg/testlv /testdir/users/ //重新掛載 [root@localhost ~]# su - archlinux [archlinux@localhost ~]$ ls -a //驗證文件是否被損壞 . .bash_history .bash_profile .gnome2 .. .bash_logout .bashrc pam.d [archlinux@localhost ~]$
9、對testlv創建快照,并嘗試基于快照備份數據,驗正快照的功能
[root@localhost ~]# lvcreate -L 500M -s -n testlv_snap -p r /dev/testvg/testlv //創建快照卷 Rounding up size to full physical extent 512.00 MiB Logical volume "testlv_snap" created. [root@localhost ~]# lvdisplay /dev/testvg/testlv_snap //查看快照卷詳情 --- Logical volume --- LV Path /dev/testvg/testlv_snap LV Name testlv_snap VG Name testvg LV UUID tuewoS-utZq-tIfv-KOLn-hhbl-g847-VIgcu3 LV Write Access read only LV Creation host, time localhost.localdomain, 2016-08-31 14:14:36 +0800 LV snapshot status active destination for testlv LV Status available # open 0 LV Size 3.00 GiB Current LE 192 COW-table size 512.00 MiB COW-table LE 32 Allocated to snapshot 0.00% Snapshot chunk size 4.00 KiB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:3 [root@localhost ~]# mount /dev/testvg/testlv_snap /backup/ //掛載快照卷,注意快照卷掛載時,不需要實現格式化 mount: block device /dev/mapper/testvg-testlv_snap is write-protected, mounting read-only [root@localhost ~]# ls -a /testdir/users/archlinux/ //驗證初始時快照卷與原卷內容 . .. .bash_history .bash_logout .bash_profile .bashrc .gnome2 pam.d [root@localhost ~]# ls -a /backup/archlinux/ . .. .bash_history .bash_logout .bash_profile .bashrc .gnome2 pam.d [root@localhost ~]# rm -rf /testdir/users/archlinux/pam.d/ //破壞原卷內容,驗證快照卷是否發生變化 [root@localhost ~]# ls -a /testdir/users/archlinux/ . .. .bash_history .bash_logout .bash_profile .bashrc .gnome2 [root@localhost ~]# ls -a /backup/archlinux/ . .. .bash_history .bash_logout .bash_profile .bashrc .gnome2 pam.d [root@localhost ~]#
原創文章,作者:M20-1倪文超,如若轉載,請注明出處:http://www.www58058.com/41824
文章對當天所學的知識進行了詳細的總結與梳理,通過練習鞏固了學到的東西,整篇博客能讓人看到很多專業性所在,也能看出很用心的地方,革命尚未成功,同志仍需努力啊,加油!