您好,登錄后才能下訂單哦!
dd命令
SWAP與移動介質
磁盤配額
RAID
dd命令
dd - convert and copy a file Copy a file, converting and formatting according to the operands.
dd命令基本用法:
ddif=/PATH/FROM/SRC of=/PATH/TO/DEST bs=#:block size, 復制單元大小count=#:復制多少個bs skip=blocks從開頭忽略blocks個ibs大小的塊 seek=blocks從開頭忽略blocks個obs大小的塊
常用選項:
conv=conversion[,conversion...] 用指定的參數轉換文件。 lcase 把大寫字符轉換為小寫字符 ucase 把小寫字符轉換為大寫字符 swab 交換輸入的每對字節 noerror 出錯時不停止 notrunc 不截短輸出文件 sync 把每個輸入塊填充到ibs個字節,不足部分用空(NUL)字符補齊
使用dd命令對磁盤進行操作進,最好使用塊設備文件;
使用示例:
創建兩個文件:
[root@centos7 ~]#echo {1..9} |tr -d [:space:] > f1 [root@centos7 ~]#echo {a..z} |tr -d [:space:] > f2 [root@centos7 ~]#cat f1 123456789[root@centos7 ~]# [root@centos7 ~]#cat f2 abcdefghijklmnopqrstuvwxyz[root@centos7 ~]# [root@centos7 ~]# [root@centos7 ~]#dd if=f1 of=f2 bs=1 count=3 3+0 records in 3+0 records out 3 bytes (3 B) copied, 0.00136469 s, 2.2 kB/s [root@centos7 ~]#cat f2 123[root@centos7 ~]# # 從f1中復制了3字節的內容覆蓋了f2 [root@centos7 ~]#dd if=f1 of=f2 bs=1 count=3 skip=3 seek=3 3+0 records in 3+0 records out 3 bytes (3 B) copied, 0.000396399 s, 7.6 kB/s [root@centos7 ~]#cat f2 abc456[root@centos7 ~]# # 從f1中跳過了3字節并復制其后的3字節插入到f2的3字節后面 [root@centos7 ~]#dd if=f1 of=f2 bs=1 count=3 skip=3 seek=3 conv=notrunc # 不截斷f2后面的內容 3+0 records in 3+0 records out3 bytes (3 B) copied, 0.00277328 s, 1.1 kB/s [root@centos7 ~]#cat f2 abc456ghijklmnopqrstuvwxyz[root@centos7 ~]#
備份MBR:
[root@centos7 ~]#dd if=/dev/sda of=/testdir/sda.mbr bs=512 count=1 1+0 records in 1+0 records out 512 bytes (512 B) copied, 0.000380182 s, 1.3 MB/s [root@centos7 ~]#
磁盤拷貝:
[root@centos7 ~]#dd if=/dev/sda of=/dev/sdb
破壞MBR中的bootloader:
[root@centos7 ~]#dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446 1+0 records in 1+0 records out 64 bytes (64 B) copied, 0.00180836 s, 35.4 kB/s [root@centos7 ~]#
破壞MBR中的分區表:
[root@centos7 ~]#dd if=/dev/zero of=/dev/sda bs=1 count=64 skip=446 seek=446 64+0 records in 64+0 records out 64 bytes (64 B) copied, 0.00589307 s, 10.9 kB/s [root@centos7 ~]#
可見,sda的分區已經被破壞!
修復sda分區表:
[root@centos7 ~]#dd if=/testdir/sda.mbr of=/dev/sda bs=512 count=1 1+0 records in 1+0 records out 512 bytes (512 B) copied, 0.000348826 s, 1.5 MB/s [root@centos7 ~]#partprobe # 同步分區表 [root@centos7 ~]#
sda被成功修復!
備份:
dd if=/dev/sdx of=/dev/sdy 將本地的/dev/sdx整盤備份到/dev/sdy dd if=/dev/sdx of=/path/to/p_w_picpath 將/dev/sdx全盤數據備份到指定路徑的p_w_picpath文件 dd if=/dev/sdx | gzip >/path/to/p_w_picpath.gz 備份/dev/sdx全盤數據,并利用gzip工具進行壓縮,保存到指定路徑
[root@centos7 ~]#dd if=/dev/sdb1 |gzip > /testdir/p_w_picpath.gz 409600+0 records in 409600+0 records out 209715200 bytes (210 MB) copied, 9.02236 s, 23.2 MB/s [root@centos7 ~]#ll /testdir/p_w_picpath.gz -rw-r--r--. 1 root root 139129150 Aug 29 08:16 /testdir/p_w_picpath.gz [root@centos7 ~]#
恢復:
dd if=/path/to/p_w_picpath of=/dev/sdx 將備份文件恢復到指定盤 gzip -dc /path/to/p_w_picpath.gz | dd of=/dev/sdx將壓縮的備份文件恢復到指定盤
[root@centos7 ~]#gzip -cd /testdir/p_w_picpath.gz |dd of=/dev/sdc 409600+0 records in 409600+0 records out 209715200 bytes (210 MB) copied, 6.16743 s, 34.0 MB/s [root@centos7 ~]#
拷貝內存資料到硬盤 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指令輸出中所顯示的命令執行時間,即可確定系統最佳的block size大小
測試硬盤讀寫速度:通過上兩個命令輸出的執行時間,可以計算出測試硬盤的讀/寫速度
[root@centos7 ~]#dd if=/root/1Gb.file bs=64k |dd of=/dev/null [root@centos7 ~]#dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
修復磁盤
[root@centos7 ~]#dd if=/dev/sda of=/dev/sda
當硬盤較長時間(比如1,2年)放置不使用后,磁盤上會產生消磁點。當磁頭讀到這些區域時會遇到困難,并可能導致I/O錯誤。當這種情況影響到硬盤的第一個扇區時,可能導致硬盤報廢。上邊的命令有可能使這些數據起死回生。且這個過程是安全,高效的。
系統配額
SWAP
交換分區是系統RAM(裸設備)的補充,涉及到的基本命令有:mkswap, swapon, swapoff, 其優先級范圍為0-32767,如果用戶未指定swap的優先級,內核會給swap指定一個優先級,此值從-1開始,每加一個優先級遞減一;用戶指定的優先級(是正數)永遠高于核心缺省指定的優先級(是負數);swap分區即可以是一個整個硬盤,也可以是一個分區(要指定分區類型)或者是將一個文件創建成swap分區。
mkswap - set up a Linux swap area swapon, swapoff - enable/disable devices and files for paging and swapping
基本設置包括:
創建交換分區或者文件
使用mkswap寫入特殊簽名
在/etc/fstab文件中添加適當的條目
使用swapon -a 激活交換空間
即:swap分區---> 格式化---> 掛載--> 激活
創建一個swap分區:
[root@centos7 ~]#dd if=/dev/zero of=/swapfile bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes (1.1 GB) copied, 1.75694 s, 611 MB/s [root@centos7 ~]#ls
格式化swap分區:
[root@centos7 ~]#mkswap /dev/sdc1Setting up swapspace version 1, size = 10485756 KiB no label, UUID=a0ac8c08-23b9-4672-bee3-449e949cea8c [root@centos7 ~]#mkswap /swapfile Setting up swapspace version 1, size = 1048572 KiB no label, UUID=4659cff5-5718-4119-a70e-6283ca443509 [root@centos7 ~]#
寫入/etc/fstab
[root@centos7 /]#swapon -a # 激活/etc/fstab中的swap類型 [root@centos7 /]#swapon -s Filename Type Size Used Priority /dev/sdc1 partition 10485756 0 10 /swapfile file 1048572 0 -1
由此,你當然可以想到,mkfs命令應該把一個文件“做成”普通分區,并且掛載之:
[root@centos7 ~]#dd if=/dev/zero of=/testdir/partfile bs=1M count=1 1+0 records in 1+0 records out 1048576 bytes (1.0 MB) copied, 0.00416736 s, 252 MB/s [root@centos7 ~]#mkfs.ext4 /testdir/partfile # mkfs.xfs不行 [root@centos7 ~]#blkid /testdir/partfile /testdir/partfile: UUID="e925d5a7-6def-430c-99e0-c4dc966caadf" TYPE="ext4" [root@centos7 ~]# [root@centos7 ~]#mkdir /testdir/partfile [root@centos7 ~]#mount -a [root@centos7 ~]#mount |grep /testdir/ /testdir/partfile on /mnt/partfile type ext4 (rw,relatime,seclabel) [root@centos7 ~]# [root@centos7 ~]#cd /mnt/partfile/ [root@centos7 /mnt/partfile]#ls lost+found [root@centos7 /mnt/partfile]#
移動介質
所有的移動介質要想被內核認可,必須得掛載,而掛載意味著使外來的文件系統看起來如同是主目錄樹的一部分,且必須要遵守:訪問前、介質必須被掛載;摘除時,介質必須被卸載。
按照默認設置,非根用戶只能掛載某些設備(光盤、DVD、USB等等), 且掛載點通常在/media 或/mnt下。
如何使用光盤:
eject命令卸載或彈出磁盤,刻錄光盤可用以下命令:
wodim–v –eject centos.iso
創建IOS文件可用以下命令:
cp/dev/cdrom /root/centos7.isomkisofs -r -o /root/etc.iso /etc
手工掛載
mount /dev/cdrom/mnt/
那如何在/etc/fstab文件里面掛載iso文件呢?如何把普通文件也掛載到一個目錄上呢?
磁盤配額
所謂磁盤配額,就是超級用戶給普通用戶分配一定的磁盤空間,以防止普通用戶占用大量的磁盤空間; 磁盤配額是在內核中執行,以文件系統為單位啟用,可以做到對不同的組或用戶制定不同的策略,且根據塊或節點進行限制;另外,磁盤配額的限制分別軟限制(soft limit)與硬限制(hatd limit),軟限制就是達到一定磁盤額度后給予警告,而硬限制就是非常強硬地限制你的所作所為,除了建立空文件和空目錄(提前是你的節點數沒達到上限,即還有空留的inode。
磁盤配額的常用命令:
usrquota: 啟用用戶配額 grpquota:啟用組配額 noquota: 不啟用配額 quotacheck, quotaon, quotaoff, repquota
實現磁盤配額主要有以下五個步驟:
1.啟用配置掛載選項 vim /etc/fstab usrquota,grpquota2. 創建配額數據庫 mount -o remount /dev/sdb1 quotacheck -cug /home setenforce 03. 啟用數據庫 quotaon /home4. 配置配額項 edquota liansir edquota -p liansir shitou setquota tom 100000 150000 0 0 /home5.測試 quota liansir repquota /home
硬盤配額/home目錄
在Linux中,磁盤配額是針對分區進行的,而不是硬盤,即磁盤配額是以文件系統為單位,在下面的試驗中,我們將對/home目錄進行硬盤配額,需要讓home獨立分區,但是現在home不是獨立分區是和根一起的,如果想要實現就需要在根上做磁盤配額,但是這樣是不合理的。需要把home獨立到一個分區。
所以,此時我們需要完成的一項工作就是把/home遷移到五個獨立的文件系統。
分區、格式化、掛載一步不能少:
[root@centos7 ~]#mkfs.ext4 /dev/sdb3 -L /home # 設其卷標為/home [root@centos7 ~]#blkid /dev/sdb3 /dev/sdb3: LABEL="/home" UUID="e18fa7a2-d436-4bd5-bfdb-453d0af53fb6" TYPE="ext4" [root@centos7 ~]# [root@centos7 ~]#mkdir /mnt/home [root@centos7 ~]#mount /dev/sdb3 /mnt/home # 新設備必須掛載才能使用
接下來,還存在一個問題,就是把/home下的數據遷移到新分區/dev/sdb3上面,復制或移動都可以,但要注意權限不要被改變!
掛載到/home目錄,注意/home目錄下數據的遷移;所以/dev/sdb3不是一次到位掛載到/home,而是先掛載到了一個其它的空目錄,待完成數據遷移后再掛載到/home。最后取消之前的掛載。注:在centos 7上只會顯示最后一次掛載。
磁盤配額的準備工作至此結束!如果是對一個普通的空目錄進行硬盤配額的話也就沒有數據遷移這回事了。
下面正式磁盤配額:
初始化:在/etc/fstab配置文件里面寫入分區掛載選項:usrquota, grpquota;初始化數據庫:checkquota, 注意初始化磁盤配額數據庫前可能需要重新掛載
[root@centos7 ~]#mount -o remount /home [root@centos7 ~]#quotacheck -cug /home
[root@centos7 /home]#file aquota.group aquota.user #這兩個文件是數據庫的二進制文件,而非文本文件 aquota.group: data aquota.user: data [root@centos7 /home]#
注:在centos 6上面會提示權限不允許,需要關閉SELinux,setenforce 0.
啟用數據庫:
[root@centos7 ~]#quotaon /home [root@centos7 ~]#quotaon -p /home group quota on /home (/dev/sdb3) is on user quota on /home (/dev/sdb3) is on [root@centos7 ~]#
配置用戶的磁盤配額
[root@centos7 ~]#edquota liansir
直接原處修改:
切換到普通用戶的家目錄,測試
測試成功!
用戶調查:查看特定用戶的磁盤配額情況
[root@centos7 ~]#quota liansir Disk quotas for user liansir (uid 1000): Filesystem blocks quota limit grace files quota limit grace /dev/sdb3 102400* 80000 102400 6days 133 0 0
配額概述:查看指定分區的磁盤配額情況
[root@centos7 ~]#repquota /home*** Report for user quotas on device /dev/sdb3 Block grace time: 7days; Inode grace time: 7days Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------- root -- 20 0 0 2 0 0 liansir +- 102400 80000 102400 6days 133 0 0 hacker -- 52 0 0 13 0 0 xue -- 32 0 0 8 0 0 [root@centos7 ~]#
我們看到,liansir用戶是有磁盤配額了,現在如果要把hacker用戶的磁盤配額設置成與liansir一樣,我們此時只是一條命令搞定!edquata -p
[root@centos7 ~]#edquota -p liansir hacker [root@centos7 ~]#
當然,我們還可以在命令行里面直接設置用戶的磁盤配額:
[root@centos7 ~]#setquota xue 100000 200000 0 0 /home #注意要指定分區 [root@centos7 ~]#
RAID
RAID (Redundant Arrays of Independent Disks), 即獨立冗余磁盤陣列,其重要技術是同位檢查(Parity Check), 在多塊硬盤組成的陣列中任意一個硬盤故障時,仍可讀出數據,在數據重構時,將數據經計算后重新置入新硬盤中。
磁盤陣列其樣式有三種,一是外接式磁盤陣列柜、二是內接式磁盤陣列卡,三是利用軟件來仿真。外接式磁盤陣列柜最常被使用大型服務器上,具可熱交換(Hot Swap)的特性;內接式磁盤陣列卡,價格相對便宜,需要較高的安裝技術,硬件陣列能夠提供在線擴容、動態修改陣列級別、自動數據恢復、驅動器漫游、超高速緩沖等功能;軟件仿真的方式,是指通過操作系統自身提供的磁盤管理功能將連接的普通SCSI卡上的多塊硬盤配置成邏輯盤,組成陣列。其中,前兩者稱為硬RAID,軟件仿真稱為軟RAID.
RAID是有級別的,本文以軟RAID為例,且RAID級別之間可以按需組合;配置RAID時的主要命令為mdadm, 且內核中提供有md模塊(multi devices),RAID設備可命名為/dev/md0、/dev/md1、/dev/md2、/dev/md3等。
mdadm
mdadm - manage MD devices aka Linux Software RAID mdadm [mode] <raiddevice> [options] <component-devices> MODES mdadm has several major modes of operation: -A, --assemble Assemble a pre-existing array. -B, --build Build a legacy array without superblocks. -C, --create Create a new array. -F, --follow, --monitor Select Monitor mode. -G, --grow Change the size or shape of an active array. 即: 模式: 創建:-C 裝配: -A 監控: -F 管理:-f, -r, -a
接下來看看RAID的主要級別:
RAID 0:條帶卷,strip
RAID 0最簡單的實現方式就是把N塊同樣的硬盤用硬件的形式通過智能磁盤控制器或用操作系統中的磁盤驅動程序以軟件的方式串聯在一起創建一個大的卷集。只需要2塊以上的硬盤即可,無冗余或錯誤修復能力,實現成本是最低,最大的缺點在于任何一塊硬盤出現故障,整個系統將會受到破壞,可靠性僅為單獨一塊硬盤的1/N。所以,RAID 0一般只是在那些對數據安全性要求不高的情況下才被人們使用。
RAID 1:鏡像卷,mirror
RAID 1稱為磁盤鏡像,原理是把一個磁盤的數據鏡像到另一個磁盤上,也就是說數據在寫入一塊磁盤的同時,會在另一塊閑置的磁盤上生成鏡像文件。具備很好的磁盤冗余能力,但磁盤利用率為50%,RAID 1多用在保存關鍵性的重要數據的場合。
RAID 5: 帶奇偶校驗的條帶機
RAID 5的奇偶校驗碼存在于所有磁盤上,其中的p0代表第0帶區的奇偶校驗值,其它亦然,對于RAID 5來說,大部分數據傳輸只對一塊磁盤操作,可進行并行操作。在RAID 5中有“寫損失”,即每一次寫操作,將產生四個實際的讀/寫操作,其中兩次讀舊的數據及奇偶信息,兩次寫新的數據及奇偶信息。
RAID 01
RAID 01是RAID0與RAID1的結合體,數據除分布在多個盤上外,每個盤都有其物理鏡像盤,提供全冗余能力,允許一個以下磁盤故障,而不影響數據可用性,并具有快速讀/寫能力。RAID 01要在磁盤鏡像中建立帶區集至少4個硬盤。
RAID 10
RAID 10是一個帶區結構加一個鏡象結構,可以相互補充,達到既高效又高速的目的。主要用于數據容量不大,但要求速度和差錯控制的數據庫中。
注:RAID級別圖片來自網絡。
介紹完RAID的主要級別,我們再來看看mdadm具體的模式命令吧!
-C: 創建模式 -n #: 使用#個塊設備來創建此RAID; -l #:指明要創建的RAID的級別; -a {yes|no}:自動創建目標RAID設備的設備文件; -c CHUNK_SIZE: 指明塊大小; -x #: 指明空閑盤的個數; -D:顯示raid的詳細信息; mdadm-D /dev/md# 管理模式: -f: 標記指定磁盤為損壞 -a: 添加磁盤 -r: 移除磁盤觀察md的狀態: cat /proc/mdstat 停止md設備: mdstat -S DVICE
OK,現在我們來實現一個RAID 5, 4個RAID盤,1個備用盤,總共5個盤。
我們準備四個硬盤,并都創建一個大小為10G的分區:
sdb 8:16 0 20G 0 disk └─sdb1 8:17 0 10G 0 part sdd 8:48 0 20G 0 disk └─sdd1 8:49 0 10G 0 part sdc 8:32 0 20G 0 disk └─sdc1 8:33 0 10G 0 part sde 8:64 0 20G 0 disk └─sde1 8:65 0 10G 0 part sdf 8:80 0 20G 0 disk └─sdf1 8:81 0 10G 0 part [root@centos6 ~]#
創建RAID: /dev/md0
[root@centos6 ~]#mdadm -C /dev/md0 -l 5 -n 4 -x 1 /dev/sd{b,d,c,e,f}1 mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. [root@centos6 ~]#
查看:
[root@centos6 ~]#ll /dev/md0 brw-rw----. 1 root disk 9, 0 Sep 2 20:17 /dev/md0 [root@centos6 ~]#cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 sde1[5] sdf1[4](S) sdc1[2] sdd1[1] sdb1[0] 31446528 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU] unused devices: <none> [root@centos6 ~]#
格式化RAID
[root@centos6 ~]#mkfs.ext4 /dev/md0
查看:
[root@centos6 ~]#blkid /dev/md0 /dev/md0: UUID="0ea747b9-c98e-47fd-b08d-fd346ecbd654" TYPE="ext4" [root@centos6 ~]#
掛載
[root@centos6 ~]#mkdir /mnt/md0 [root@centos6 ~]#mount -a
查看:
[root@centos6 ~]#mount |grep /dev/md0 /dev/md0 on /mnt/md0 type ext4 (rw) [root@centos6 ~]#
測試
[root@centos6 ~]#cd /mnt/md0 [root@centos6 /mnt/md0]#touch f1 # 可創建文件 [root@centos6 /mnt/md0]# [root@centos6 ~]#mdadm /dev/md0 -f /dev/sdb1 # 損壞 /dev/sd1mdadm: set /dev/sdb1 faulty in /dev/md0 [root@centos6 ~]# [root@centos6 ~]#mdadm /dev/md0 -r /dev/sdb1 # 熱移除 mdadm: hot removed /dev/sdb1 from /dev/md0 [root@centos6 ~]#
至此,我們重啟系統!
重啟系統后我們發現RAID失效了!不過這個跟損壞/dev/sdb1沒關系
此時再次重復以上步驟!
在重啟系統之前我們必須先備份!
[root@centos6 ~]#mdadm -Ds /dev/md0 > /etc/mdadm.conf # 否則重啟系統后RAID失效
然后重啟系統:
查看RAID:
[root@centos6 ~]#mdadm -D /dev/md0
再次測試:
[root@centos6 ~]#mdadm /dev/md0 -f /dev/sdb1 mdadm: set /dev/sdb1 faulty in /dev/md0 [root@centos6 ~]#
[root@centos6 ~]#mdadm /dev/md0 -r /dev/sdb1
此時備用盤已經被移除,
在RAID盤里創建一些文件,然后我們再移除一塊RAID硬盤。
[root@centos6 /mnt/md0]#dd if=/dev/zero of=/mnt/md0/f2 bs=100M count=1 1+0 records in 1+0 records out 104857600 bytes (105 MB) copied, 0.254593 s, 412 MB/s [root@centos6 /mnt/md0]#ll total 102416 -rw-r--r--. 1 root root 0 Sep 2 21:56 f1 -rw-r--r--. 1 root root 104857600 Sep 2 21:56 f2 drwx------. 2 root root 16384 Sep 2 21:28 lost+found [root@centos6 /mnt/md0]# [root@centos6 ~]#mdadm /dev/md0 -f /dev/sdf1 mdadm: set /dev/sdf1 faulty in /dev/md0 [root@centos6 ~]#mdadm /dev/md0 -r /dev/sdf1 mdadm: hot removed /dev/sdf1 from /dev/md0 [root@centos6 ~]# [root@centos6 ~]#cd /mnt/md0 #查看數據是否正常 [root@centos6 /mnt/md0]#ls f1 f2 lost+found [root@centos6 /mnt/md0]#
測試成功!
RAID管理:添加新的分區與擴展新成員(在硬盤的數量上進行擴展)
[root@centos6 ~]#mdadm /dev/md0 -a /dev/sdg1 # 給RAID添加新分區 mdadm: added /dev/sdg1 [root@centos6 ~]#
[root@centos6 ~]#mdadm -G /dev/md0 -n 6 -a /dev/sdh2 # 擴展 mdadm: added /dev/sdh2
注意,在做RAID時,最好各硬盤的分區一樣大,因為會以最小的為標準,多余的空間則會浪費掉;另外,生產環境中無人用軟RAID,軟RAID僅用途測試與理解RAID用!
本文主要介紹了dd命令的常規用法、如何建立交換分區SWAP、常用RAID的基本特性與RAID 5的配置. 2016.9.3
止戰
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。