兩種特殊文件;
設備文件;
mknod
符號鏈接文件;
鏈接;就是訪問一個文件的不同的路徑
硬鏈接;
數據塊指針指向同一個數據塊的文件;
每次創建硬鏈接都會增加inode的引用計數
注意;不能跨文件系統創建硬鏈接,目錄文件不能創建硬鏈接
符號鏈接(軟鏈接)
用於存儲被鏈接文件的路徑的文件
可以誇文件系統創建,
也可以對目錄創建符號鏈接
每次都必須進行兩組路徑的查找
ln命令;
ln [option...] src_file link_file
-s,--symbolic;創建符號鏈接,省略該選項,即創建硬鏈接
-v, --verbose;顯示鏈接創建的過程可以,最好鏈接至
注意;創建符號鏈接時,如果想要保證該鏈接文件被複制或移動到其他路徑中依然可以,最好鏈接至被鏈接文件的絕對路徑
版本管理;
apache;
2.2 2.4
將不同的版本的軟件分別放置於不同的目錄中,使用符號,將軟件鏈接的一個統一的路徑;
/usr/local/apache ---> /usr/local/apache-2.2
/usr/local/apache-2.2
/usr/local/apache-2.4
RAID;
IDE
SCSI
Redundant Array of Inexpensive Disks;廉價磁盤冗餘陣列
Redundant Array of Independent Disks;獨立磁盤冗餘陣列
RAID;
提高IO能力
使多個磁盤實現並行讀寫;
磁盤條帶化,chunk
提高耐用性
磁盤冗餘實現
即使磁盤發生故障或損壞,也不會影響數據;
RAID的實現方式;
硬件實現;
通過硬件RAID控制器或適配器,將所需的磁盤組織成RAID,而後安裝OS;
BIOS程序
軟件模擬實現;
操作系統通過系統調用的方式模擬RAID實現
RAID的操作級別;
RAID0;
提高IO性能,條帶卷,strip
至少2塊磁盤
沒有冗餘容錯能力
沒有存儲空間浪費,要求每個磁盤必須提供相同大小的存儲空間;
RAID1;
提供高可用性,鏡像卷,mirror
需要2塊磁盤
先將數據存入主盤,然後再將數據存入從盤;
寫入效率較低,略微提升讀效率
磁盤空間的整體利用率爲50%
有冗餘容錯的能力
RAID2;
RAID3;
RAID4;
多塊磁盤進行異或運算,得到校驗值,並且使用專門的一塊磁盤存放校驗值;
即使一塊磁盤損壞,也不會丟失數據
校驗盤IO壓力巨大,很容易形成性能瓶頸;
RAID5;
多塊磁盤進行循環冗餘校驗嗎,將校驗值隨機分配到不同磁盤的條帶中;
讀,寫IO性能均明顯提升,又不會出現性能瓶頸
磁盤利用率=(n-1)/n * 100%
冗餘容錯
至少需要3塊磁盤
RAID6;
多塊磁盤進行兩輪循環冗餘校驗,將校驗值隨機分配到兩個不同磁盤的條帶中
讀,寫IO性能均明顯提升,又不會出現性能瓶頸
最多運行兩塊磁盤出現故障或損壞依然保證數據可用
代價就是增加了計算校驗值的時間;
RAID混合級別;
RAID01;
先做RAID0,在做RAID1
RAID10;
先做RAID1,在做RAID0
RAID50;
先做RAID5,在做RAID0
RAID7;
可以理解爲一個存儲計算機,自帶操作系統以及相應的管理工具,可以獨立運行
JBOD;just a bunch of disks;僅僅就是一組磁盤
將多塊磁盤的存儲空間連接到一起,順序存放數據
在centos上實現軟RAID
內核提供一個md的模塊(multi disks,multi devices)
用戶空間需要mdadm的工具,來設置和修改md內核模塊的參數;
mdadm;模式化工具
mdadm [mode] <raiddevice> [option...] <component device>
模式包括;
創建模式;-C
-n#(數字):使用#(數字)塊硬盤創建RAID設備
-l#(數字);指示RAID的級別
-a{yes|no};允許系統或不允許系統自動創建md設備文件;
-c CHUNK_SIZE;指定CHUNK的大小,
-x#(數字);指定在陣列中空閒磁盤的數量
裝配模式;-A
根據/etc/mdadm.conf指示的RAID進行裝配
管理模式;-a,-r,-f
雜項;
-D,--scan
顯示RAID設備的詳細信息
mdadm -D --scan > /etc/mdadm.conf
該配置文件用於RAID設備的再次裝配
-S;停止RAID的設備
dd
LVM2;
logical volume manager,邏輯卷管理器,Version 2
IBM
使用純軟件的方式組織一個或多個底層的塊設備,將他們重新定義爲一個邏輯塊設備的解決方案;
利用內核中的dm模塊實現;
dm;device mapper,設備映射表
dm模塊可以將一個或多個底層塊設備組織成一個邏輯塊設備;
用戶空間中的相應命令來向dm模塊發出系統調用,就可以完成後邏輯塊設備的管理;
邏輯塊設備同意存放在/dev/dm -#(數字)
使用DM機制實現LVM管理的步驟;
1.創建並標識物理卷
注意;如果用來創建物理卷的設備是普通分區,一定要將分區的ID修改爲8e;
2.基於PV創建卷組,邏輯塊設備,創建卷組的同時指定PE的大小
注意;一旦PE大小被指定,就不允許更改,
3.在已經創建的卷組中創建邏輯卷
4.在邏輯卷中創建文件系統(高級格式化)
5.掛載
物理卷的管理操作;
pvcreate;創建物理卷
pvdisplay;顯示物理卷的詳細信息
pvs;顯示物理卷的簡單信息
pvremove;刪除物理卷
pvmove;將某個物理卷中的所有的PE移動到其他物理卷中;
卷組的管理操作;
vgcreate;創建卷組
-s #(數字){kkmMgG};指定PE的大小,如果省略選項,默認的PE爲4M
vgremove;刪除卷組
vgextend;擴展卷組容量,將新的pv添加到卷組中
vgreduce;縮減卷組容量,將pv從卷組中移除,在做此操作之前,應該先使用pvmove,保證被移除的pv上沒有被佔用的PE
vgdisplay;顯示卷組的詳細信息
vgs;顯示卷組的簡短信息
邏輯卷的管理操作;
lvcreate;創建邏輯卷
-L lv_SIZE(#(數字){kk|mM|gG});指定邏輯卷的大小,不能超過卷組的容量
-l #(數字)%{FREE|VG|ORIGIN|PVS};指定邏輯卷佔用對應存儲單元的百分比
-n LV_name;指定邏輯卷的名稱
-i #(數字);在創建邏輯卷的時候,以條帶的方式創建,並指明這個邏輯捲上有#(數字)個條帶
-I #(數字);在創建邏輯卷的時候,以條帶的方式創建,並指明CHUNK的大小;
lvremove;刪除邏輯卷
lvdisplay;顯示邏輯卷的詳細信息
lvs;顯示邏輯卷的簡短信息
lvchange;修改LV的狀態
-ay;激活邏輯卷
-an;停用邏輯卷
lvextend;擴展邏輯卷的空間;
注意;一定要擴展邏輯卷的物理邊界,在擴展邏輯卷的邏輯邊界
使用ext系列文件系統的時候,resize2fs命令擴展邏輯邊界
lvreduce;縮減邏輯卷的空間;
注意;先縮減邏輯卷的邏輯邊界,在縮減邏輯卷的物理邊界
使用ext系列文件系統的時候,resize2fs命令縮減邏輯邊界使用
爲了更好的使用邏輯卷,爲/dev/dm-#(數字)設備創建了兩個符號鏈接爲念;
/dev/mapper/VG_NAME-LV_NAME --> ../dm-#(數字)
/dev/VG_NAME/LV_NAME --> ../dm -#(數字)
邏輯卷的快照;
快照,本身就是一種邏輯卷;目標邏輯卷的另外一個訪問路徑;
lvcreate -s -p r -L 15G -n mylv-snopshot /PATH/TO/DEST_LV
-L SIZE:指定快照邏輯卷的大小
-s:創建一個快照邏輯卷
-p r:創建處理的邏輯卷是隻讀權限
-n SNAPSHOT_NAME:指定快照邏輯卷的名稱
三個命令:
df命令:
df - report file system disk space usage
df [OPTION]... [FILE]...
-h, --human-readble:單位轉換
-l, --local:只顯示本地文件系統,不顯示網絡文件系統
-i, --inodes:顯示inode使用狀態
-T, --print-type:顯示文件系統類型
-P, --portability:使用POSIX輸出格式,更易於閱讀
du命令:
du - estimate file space usage
du [OPTION]... [FILE]...
-s, sumary,:顯示整個目錄彙總的文件大小
-h, human-readble:單位轉換
dd命令:convert and copy a file
dd [OPERAND]...
dd OPTION
常見的OPERAND:
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
bs=BYTES:block size, 複製單元大小
count=N:複製多少個bs
of=FILE:寫到所命名的文件而不是到標準輸出
if=FILE:從所命名文件讀取而不是從標準輸入
ibs=BYTES:一次讀size個byte
obs=BYTES:一次寫size個byte
skip=BLOCKS:從開頭忽略blocks個ibs大小的塊
seek=BLOCKS:從開頭忽略blocks個obs大小的塊
conv=conversion[,conversion...]:用指定的參數轉換文件。
轉換參數:
ascii:轉換EBCDIC爲ASCII。
ebcdic:轉換ASCII爲EBCDIC。
block:把每一行轉換爲長度爲cbs的記錄,不足部分用空格填充。
unblock:使每一行的長度都爲cbs,不足部分用空格填充。
lcase:把大寫字符轉換爲小寫字符。
ucase:把小寫字符轉換爲大寫字符。
swab:交換輸入的每對字節。
noerror:讀取出錯時繼續讀取。
notrunc:不截短輸出文件。
sync:把每個輸入塊填充到ibs個字節,不足部分用空(NULL)字符補齊
磁盤拷貝:
~]# 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
有二進制文件fileA,size>2K。現在想從第64個字節位置開始讀取,需要讀取的大小是128Byts。又有fileB, 想把上面讀取到的128Bytes寫到第32個字節開始的位置,替換128Bytes,請問如何實現?
~]# dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc
備份:
將本地的/dev/sdx整盤備份到/dev/sdy
~]# dd if=/dev/sdx of=/dev/sdy將本地的/dev/sdx整盤備份到/dev/sdy
將/dev/sdx全盤數據備份到指定路徑的p_w_picpath文件
~]# dd if=/dev/sdx of=/path/to/p_w_picpath
備份/dev/sdx全盤數據,並利用gzip工具進行壓縮,保存到指定路徑
~]# dd if=/dev/sdx | gzip >/path/to/p_w_picpath.gz
恢復:
將備份文件恢復到指定盤
~]# dd if=/path/to/p_w_picpath of=/dev/sdx
將壓縮的備份文件恢復到指定盤
~]# gzip -dc /path/to/p_w_picpath.gz | dd of=/dev/sdx
拷貝內存資料到硬盤
將內存裏的數據拷貝到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
銷燬磁盤數據
利用隨機的數據填充硬盤,在某些必要的場合可以用來銷燬數據。執行此操作以後,/dev/sda1將無法掛載,創建和拷貝操作無法執行。
~]# dd if=/dev/urandom of=/dev/sda1
得到最恰當的block size
通過比較dd指令輸出中所顯示的命令執行時間,即可確定系統最佳的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 if=/root/1Gb.file bs=64k | dd of=/dev/null
~]# dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
修復硬盤
當硬盤較長時間(比如1,2年)放置不使用後,磁盤上會產生消磁點。當磁頭讀到這些區域時會遇到困難,並可能導致I/O錯誤。當這種情況影響到硬盤的第一個扇區時,可能導致硬盤報廢。上邊的命令有可能使這些數據起死回生。且這個過程是安全,高效的。
~]# dd if=/dev/sda of=/dev/sda