1.磁盤和文件系統管理:
文件系統管理工具:
創建文件系統工具(文件系統建議使用ext4)
(1)mkfs.FS_TYPE
a.mkfs.{ext2,ext3,ext4,xfs,vfat..} /dev/DEVICE :對于分區創建文件系統
b.mkfs -t FS_TYPE /dev/DEVICE :對于分區創建文件系統
mkfs -L 'LABEL' /dev/DEVICE :給分區設定卷標
(2)mke2fs:ext系列文件系統專用管理工具
-t {ext2|ext3|ext4}:指定ext的文件系統類型 ext2,ext3,ext4
-b {1024|2048|4096}:指明文件系統的塊大小,默認為4K(大文件塊大好,小文件塊小好)
注意:一旦創建文件系統之后,文件的塊大小已經被創建,除了重新創建文件系統,其余都無法修改文件的塊大小。
-L 'LABEL' :指明文件系統的卷標
-j: 創建有日志功能的文件系統ext3:mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i #: 指明inode與字節的比率,即每多少個字節創建一個inode;此大小不應該小于block的大小
-N #:直接指明要給此文件系統創建的inode的數量;
-I 一個inode 記錄大小128—4096
-m #: 默認5%, 為管理人員預留空間占總空間的百分比
-O [^]FEATURE:以指定的特性創建目標文件系統;
注意:CentOS6系統上面默認不支持xfs格式的文件,需自己使用yum源安裝xfsprogs進行添加xfs格式的文件系統類型;
檢測及修復文件系統工具
(1)fsck.{ext2,ext3,ext4,xfs,vfat…}
(2)fsck:用于實現文件系統檢測的工具(因進程意外終止或系統崩潰等原因導致定操作非正常終止時,可能會造成文件損壞;此時,應檢測并修復文件系統)
-t fstype:指明文件系統類型
fsck -t ext4 =fsck.ext4
-a:無需交互而自動修復所有錯誤
-f:交互式修復
注意:fsck命令使用時,建議將磁盤卸載之后進行修復
(3)e2fsck:ext系列文件系統的專用工具
檢查的過程:
①檢查inode塊和大小
②檢查目錄結構
③檢查目錄連接性,目錄和文件的映射是否正常
④檢查引用計數
⑤檢查簇的概要信息
e2fsck [OPTIONS] /dev/DEIVCE
-y:對所有問題自動回答為yes
-f:即使文件系統處于clean狀態,也要強制檢測
查看其屬性的工具
(1)dumpe2fs:顯示ext系列文件系統的屬性信息:
dumpe2fs /dev/DEVICE:顯示超級塊的屬性信息和每個塊組的詳細信息。
dumpe2fs -h /dev/DEVICE:只顯示超級塊的屬性信息
(2)tune2fs
tune2fs [OPTIONS] /dev/DEVICE
-l:查看指定文件系統超級塊信息;
調整文件系統特性
(1)tune2fs
tune2fs [OPTIONS] /dev/DEVICE
-l:查看指定文件系統超級塊信息;
修改指定文件系統的屬性:
-L 'LABEL':修改卷標
-m #:修預留給管理員的空間百分比(默認空間百分比為5%)
-j:將ext2升級為ext3
-O [^]FEATHER:文件系統屬性啟用或禁用;
–O ^has_journal:關閉日志功能,將ext3轉換為ext2格式,但是ext4會關閉日志功能,但是文件類型不會由ext4轉化為ext2
-o [^]mount_options:調整文件系統的默認掛載選項,–o ^acl
CentOS6.x系統除了安裝時候使用的文件系統默認掛載acl權限,其余后添加掛載的磁盤默認沒有acl權限
CentOS7.x系統在安裝和后添加硬盤掛載的時候,默認都會添加acl權限
-U UUID;修改UUID號
(2)e2label:ext系文件系統查看和設置卷標:
a.查看:e2label /dev/DEVICE
b.設定:e2label /dev/DEVICE LABEL
e2label /dev/sdc1 MYDATA
塊設備屬性信息查看:blkid
blkid [OPTION]… [DEVICE]
blkid /dev/DEVICE
blkid -L LABEL:根據指定的LABEL來查找對應的設備
blkid -U UUID:根據指定的UUID來查找對應的設備
2.swap文件系統:
linux上的交換分區必須使用獨立的文件系統(獨立的分區)
且文件系統的System ID必須為82;82只能用于swap分區
創建swap分區:mkswap
mkswap [OPTIONS] /dev/device
-L LABEL:指明卷標
-f:強制創建為swap分區
交換分區的啟用和禁用:
啟用:swapon
swapon [OPTION] [DEVICE]
-a:定義在/etc/fstab文件中的所有swap設備
禁用:swaoff
swapoff [DEVICE]
swap的優先級:
(1)用戶可以給某個swap指定一個0–32767的優先級
(2)如果用戶沒有指定,那么核心會自動給swap指定一個優先級,這個優先級從-1開始,沒加入一個新的沒有用戶指定優先級的swap,會給這個優先級減一;
(3)先添加的swap的缺省優先級比較高,除非用戶自己指定一個優先級,而用戶指定的優先級(是正數)永遠高于核心缺省指定的優先級(是負數);
(4)優化性能:分布存放,高性能磁盤存放。
3.Windows無法識別Linux的文件系統,因此,存儲設備需要兩種系統之間交叉使用時,應該使用windows和Linux同時使用支持的文件系統:fat32(vfat)
mkfs.vfat /dev/DEVICE
4.文件系統的使用:掛載mount和卸載umount
根文件系統之外的其他文件系統要想都能被訪問,必須通過"關聯"至根目錄系統上的某個目錄來實現;
此關聯操作為"掛載";此目錄為掛載點;
(1)掛載點:mount_point,用于作為另一個文件系統的訪問入口;
掛載點特性:目錄
①掛載點應該實現存在;
②應該使用未被或不會被其他進程使用到的目錄
③掛載點下掛載之前原有的文件將會被隱藏;
(2)查看系統上的掛載;
df:查看文件系統磁盤空間使用情況,可在中間看到文件系統和掛載點等選項
mount (單純的mount命令)顯示在系統上已經掛載的設備以及掛載點
cat /proc/mounts:查看內核追蹤到的已掛載的所有設備;
cat /etc/mtab:查看文件系統上面當前已掛載的所有情況;(等同于mount)
(3)mount掛載命令詳解:
/etc/mtab:記錄系統上面所有的掛載情況
mount文件掛載之后,重啟機器之后掛載失效
mount [-nrw] [-t vfstype] [-o options] device dir
命令選項:
-a:將/etc/fstab文件中的所有文件的掛載對應關系,重新掛載一遍(已經掛載的不會掛載,沒有掛載的會被掛載)
-r:readonly,只讀掛載,掛載光盤時常使用此選項
-w:read and write,讀寫掛載(Linux默認掛載選項為讀寫掛載)
-n:默認情況下,設備掛載或卸載的操作會同步更新至/etc/mtab文件中;使用-n表示掛載設備時,不把信息寫入此文件
-t FSTYPE:指明要掛載設備上文件系統的類型(可省略);不使用此選項時,mount會調用blkid命令來獲取對應文件系統的類型;
-L LABEL:掛載時以卷標的方式指明設備;
mount -L LABEL /dir
-U UUID:掛載時以UUID的方式指明設備;
mount -U UUID /dir UUID=5dfb0193-86ae-4eab-8096-82d2b6ee129e
-o:指定額外的掛載選項,指文件系統啟用的屬性
sync/async:同步/異步操作;(內存寫到磁盤)
atime/noatime:文件或目錄在被訪問時是否更新其訪問時間戳
diratime/nodiratime :目錄被訪問時是否更新其訪問時間戳
remount :重新掛載
acl:啟用此文件系統上的acl功能
#mount -o acl /dev/DEVICE dir
#tune2fs -o acl /dev/DEVICE
ro 掛載為只讀 等同于 -r
rw 掛載為讀寫
dev/nodev:此設備上是否允許創建設備文件
exec/noexec:是否允許運行此設備上的程序文件
(當被掛載的分區上面的內容不清楚時,尤其是不知道里面是否含有.sh腳本時,建議使用-o noexec選項禁用腳本的執行功能)
auto/noauto:是否支持自動掛載, 是否支持-a選項是否支持將文件系統上運行應用程序
user/nouser:是否允許普通用戶掛載此設備,默認管理員才能掛載
suid/nosuid:是否允許程序文件上的suid和sgid特殊權限生效
Defaults:相當于rw, suid, dev, exec, auto, nouser, async
一個使用技巧:
可以實現將目錄綁定到另一個目錄上面,作為其臨時訪問入口
mount –bind 源目錄 目標目錄
掛載光盤:
mount -r /dev/cdrom mount_point
光盤設備文件:/dev/cdrom /dev/dvd
掛載本地的回環設備:
mount -o loop /PATH/TO/SOME_LOOP_FILE MOUNY_POINT
(4)umount卸載命令詳解:卸載某文件系統
umount 設備
umount 掛載點
卸載時的注意事項:
掛載的設備沒有進程使用,正在被進程訪問的掛載點將無法被卸載
卸載時會顯示:
umount: /misc/cd: device is busy.
(in some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
查看被哪個或那些進程所占用:
lsof mount_point
fuser -v mount_point
終止所有正在訪問某掛載點的進程:
fuser -km mount_point:將mount_point上面的所有進程和用戶都會被踢出
5./etc/fstab配置文件:
設定除根文件系統以外的其他文件系統能夠開機時自動掛載
每行定義一個要掛載的文件系統及其相關屬性:
6個字段:
(1)要掛載的設備: 設備文件、LABEL、UUID、偽文件系統,如sysyfs,porc,tmpfs等
(2)掛載點,注意:swap類型的設備的掛載點為swap
(3)文件系統類型
(4)掛載選項:defults:使用默認掛載選項
若要同時指明多個掛載選項,彼此間逗號分隔;
defualts,acl,nostime,noexec
(5)轉儲頻率:
0:從不備份;
1:每天備份一次;
2:每隔一天備份一次;
(6)自檢次序:
0:不自檢
1:首先自檢(第一個自檢),通常只是跟文件系統可用1
2:次級自檢
….
6.常見的工具:
(1)內存空間使用狀態:
free [OPTION]
-m:以MB為單位顯示
-g:以GB為單位顯示
(2)文件系統空間占用等信息的查看工具
df [OPTION]… [FILE]..
-H 以1000位單位(-h的單位為1024)
-l:僅顯示本地文件的相關信息
-h:human-readable以便捷閱讀的方式顯現出
-i:顯示inode的使用狀態而非blocks
-P:以Posix兼容的格式輸出
(3)查看某目錄總體空間的占用狀態:
du [OPTION]… [FILE]..
-s:sumary
-h:human-readable
7.工具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 指定塊大小(既是是ibs 也是obs)
ibs=size 一次讀size 個byte
obs=size 一次寫size 個byte
cbs=size 一次轉化size 個byte
skip=blocks 從開頭忽略blocks 個ibs 大小的塊
seek=blocks 從開頭忽略blocks 個obs 大小的塊
count=n 只拷貝n個記錄
conv=conversion[,conversion…] 用指定的參數轉換文件。
轉換參數:
ascii 換 轉換 EBCDIC 為 為 ASCII
ebcdic 換 轉換 ASCII 為 為 EBCDIC
block 轉換為長度為 cbs 的記錄,不足部分用空格填充。
unblock 替代cbs 長度的每一行尾的空格為新行
lcase 把大寫字符轉換為小寫字符
ucase 把小寫字符轉換為大寫字符
swab 交換輸入的每對字節
noerror 出錯時不停止
notrunc 不截短輸出文件
sync 把每個輸入塊填充到ibs 個字節,不足部分用空(NUL) 字符補齊
磁盤拷貝:
dd if=/dev/sda of=/dev/sdb
擴展:
拷貝內存資料到硬盤:將內存里的數據拷貝到root目錄下的mem.bin 文件
dd if=/dev/mem of=/root/mem.bin bs=1024
從光盤拷貝iso鏡像:拷貝光盤數據到root文件夾下,并保存為cd.iso文件
dd if=/dev/cdrom of=/root/cd.iso
備份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=31conv=notrunc
備份:
(1)將本地的/dev/sdx 整盤備份到/dev/sdy
dd if=/dev/sdx of=/dev/sdy
(2)將/dev/sdx 全盤數據備份到指定路徑的image文件
dd if=/dev/sdx of=/path/to/image
(3)備份/dev/sdx全盤數據,并利用gzip工具進行壓縮,保存到指定路徑
dd if=/dev/sdx | gzip >/path/to/image.gz
? 恢復:
(1)將備份文件恢復到指定盤
dd if=/path/to/image of=/dev/sdx
(2)將壓縮的備份文件恢復到指定盤
gzip -dc /path/to/image.gz | dd of=/dev/sdx
銷毀磁盤數據
dd if=/dev/urandom of=/dev/sda1
利用隨機的數據填充硬盤,在某些必要的場合可以用來銷毀數據。執行此操作以后,/dev/sda1將無法掛載,創建和拷貝操作無法執行。
得到最恰當的block size
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
dd if=/dev/zero of=/root/1Gb.file bs=2048 count=500000
dd if=/dev/zero of=/root/1Gb.file bs=4096 count=250000
dd if=/dev/zero of=/root/1Gb.file bs=8192 count=125000
通過比較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 錯誤。
當這種情況影響到硬盤的第一個扇區時,可能導致硬盤報廢。上邊的命令有可能使這些數據起死回生。且這個過程是安全,高效的。
8.實戰:磁盤分區的備份與恢復(MBR)
(1)查看系統上的磁盤掛載情況
lsblk
ls /dev/sd*
(2)查看磁盤上的分區情況
fdisk -l /dev/sda 以/dev/sda為例
(3)查看磁盤上的mbr
hexdump -C -n 512 /dev/sda
(4)備份/dev/sda的MBR到/testdir/mbrbak
dd if=/dev/sda of=/testdir/mbrbak bs=1 count=512
(5)查看備份后的mbr內容
hexdump -C -n 512 /testdir/mbrbak
(6)以/testdir/mbrbak為模板恢復/dev/sdb
dd if=/testdir/mbrbak of=/dev/sdb bs=1 count=512
hexdump -C -n 512 /dev/sdb
(7)破壞boot loader
dd if=/dev/zero of=/dev/sdb bs=1 count=446
hexdump -C -n 512 /dev/sdb
(8)破壞分區表
dd if=/dev/zero of=/dev/sdb bs=1 count=64 skip=446 seek=446
hexdump -C -n 512 /dev/sdb
(9)破壞分區標識(即破壞55aa)
dd if=/dev/zero of=/dev/sdb bs=1 count=2 skip=510 seek=510
hexdump -C -n 512 /dev/sdb
/testdir/mbrbak:該文件是我們備份出來的超級塊的信息
(10)恢復分區標識
dd if=/testdir/mbrbak of=/dev/sdb bs=1 count=2 skip=510 seek=510
hexdump -C -n 512 /dev/sdb
(11)恢復分區表
dd if=/testdir/mbrbak of=/dev/sdb bs=1 count=64 skip=446 seek=446
hexdump -C -n 512 /dev/sdb
(12)恢復boot loader
dd if=/testdir/mbrbak of=/dev/sdb bs=1 count=446
hexdump -C -n 512 /dev/sdb
原創文章,作者:sjsir,如若轉載,請注明出處:http://www.www58058.com/40711
文章對磁盤管理要點記錄的很詳細,但是更重要的是要進行一些具體操作,只有在實踐中,我們才能發現問題,總結問題,形成自己的經驗,這樣我們才能有收獲更多,學到更多的東西。