8.8-9 fsck、dd


8.8 fsck:檢查並修復Linux文件系統

  fsck命令用於檢查並修復文件系統中的錯誤,即針對有問題的系統或磁盤進行修復,類似的命令還有e2fsck命令。有關fsck的使用需要特別注意的是:

    1)文件系統必須是卸載狀態,否則可能會出現故障。
    2)不要對正常的分區使用fsck,在不加參數的情況下,fsck會根據/etc/fstab進行文件系統檢查,這相當於fsck -As參數的功能。
 
1)在fsck命令及后面的選項和文件系統里,每個元素之間都至少要有一個空格。
2)filesys可以是一個設備名(例如:/dev/sdal、/dev/sdb2)、一個掛載點(例如:/、/usr、/home)或一個文件系統的磁盤標簽,也可以是UUID指定符(例如:UUID=8868abf6-88c5-4a83-98b8-bfc24057f7bd或LABEL=root)。

fsck 命令的參數選項及說明

-a    自動修復文件系統,不詢問任何問題
-s    按順序檢查多個文件系統
-t    指定要檢查的分區的文件系統類型
-A    依服/etc/fstab配置文件的內容,檢查文件內所列的全部文件系統
-N    不執行指令,僅列出實際執行會進行的動作 
 
    必須卸載文件系統后才能對其進行檢查,否則可能會出現錯誤。平時沒有必要使用這個命令檢查磁盤,只有當系統開機顯示磁盤錯誤時,才需要執行。 
    系統開機通過fsck自檢。 
 
Linux在開機過程中系統會自動調用fsck命令對需要自檢的磁盤進行自檢(如圖8-3所示)。
 
 
    系統開機之所以會通過fsck自檢,就是因為系統開機過程中會優先讀取/etc/fstab文件,當最后一列設置為1或2時,這個磁盤在開機時就會調用fsck進行自檢,fstab的文件(man fstab看幫助)信息如下:
[root@cs6 ~]# cat /etc/fstab
 
#
# /etc/fstab
# Created by anaconda on Sun May  5 23:10:33 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/vg_cs6-lv_root /                       ext4    defaults        1 1
UUID=b7b58ad5-f612-4132-9e1f-5d55af6a9a58 /boot                   ext4    defaults        1 2
/dev/mapper/vg_cs6-lv_swap swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/sdb1              /mnt                     ext4       defaults     0  0 
 
    提示:管理員增加硬盤規划分區,一般最后一列都設置為0,即開機過程中不對磁盤檢查,如果真有問題,可以在啟動系統后人為進行檢查。
  
Linux 斷電后重啟故障修復案例。 
    當Linux系統遭遇突然斷電等非正常關機操作時,很容易導致文件系統數據損壞,造成系統不能重新啟動,此時,屏幕出現的提示可能是如下內容:
 
    此時根據系統提示輸入root用戶的密碼,注意而不是直接按Control-D繼續,會再重啟。
當輸入正確的密碼之后,正常會出現下面的提示:
    (Repair filesystem)1 
此時就可以輸入fsck或者fsck -A對磁盤進行修復檢查,執行后可能出現一堆詢問,按yes即可。 
(Repair filesystem) 1   # fsck -A #<==可能會等種一段時間或 fsck
(Repair filesystem) 2   # <=修復完畢會返回到這個提示符,此時就可以試着重啟系統,看故障是否修復了。 
 
1)除了按照開機的提示進行修復外,也可以利用系統盤進入教援模式或單用戶模式對系統故障進行修復。
2)千萬不要在開機正常工作的情況下執行fsck來檢查磁盤,因為這樣有可能會導致正常的磁盤發生故障。
3)/etc/fstab中的最后一列數字為1或2時,當系統開機時就會讀取fsck對這些系統磁盤進行自檢。
4)不要在已經掛載的文件系統上執行fsck等磁盤修復命令,因為這樣可能會導致故障。 

8.9 dd:轉換或復制文件 

    dd命令具有復制文件、轉換文件和格式化文本的功能。 

dd命令的參數選項及說明

if=<輸入文件>    從指定文件中讀取,全稱為input file
of=<輸出文件>    寫入到指定文件,全稱為output file
bs=<字節數>      一次讀寫的字節數,全稱為block size
count=<塊數>     指定復制block塊的個數
ibs=<字節數>     一次讀的字節,默認是512
obs=<字節數>     一次寫的字節,默認是512
conv=<格式>     格式轉換
                ucase把字母由小寫轉換為大寫
                lcase把字母由大寫轉換為小寫
 

將/dev/sda1分區復制(備份)到文件中

[root@cs6 ~]# dd if=/dev/sdb1 of=dev_sdb1.img  #<==使用if從/dev/sdb1中讀取數據,使用of指定輸出到當前日錄的dev_sdb1.img。
835317+0 records in
835317+0 records out
427682304 bytes (428 MB) copied, 13.3079 s, 32.1 MB/s
 
[root@cs6 ~]# ll -h dev_sdb1.img
-rw-r--r--. 1 root root 408M May 11 15:20 dev_sdb1.img 

刪除/dev/sdb1分區數據

下面的實驗很危險,請使用虛擬機操作,並提前做好快照。
從/dev/zero設備讀取數據,寫入或覆蓋/dev/sdb1的數據:
[root@cs6 ~]# dd if=/dev/zero of=/dev/sdb1         #<==/dev/zero是一個特殊的設備,相當於什么都沒有。
dd: writing to `/dev/sdb1': No space left on device    #<==提示寫滿了。
835318+0 records in
835317+0 records out
427682304 bytes (428 MB) copied, 1.77188 s, 241 MB/s
 
#/dev/zero是0字符設備,可產生連續不斷的特殊數據流,生成的文件為特殊格式的數據文件(二進制)。
 
[root@cs6 ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_cs6-lv_root
                       26G  1.3G   24G   5% /
tmpfs                 931M     0  931M   0% /dev/shm
/dev/sda1             477M   28M  424M   7% /boot
/dev/sdb1              16Z   16Z  389M 100% /mnt/data1
[root@cs6 ~]# ls /mnt/data1
 
    可以看到,上面的/mnt/data1分區被清空了,此時系統已經遭到破壞。這種情況千萬不要重啟系統,/mnt/data1分區受損是無法啟動系統的,應該繼續下面的恢復操作。
 
用范例8-19的備份恢復范例8-20刪除的分區數據。
[root@cs6 ~]# dd if=dev_sdb1.img of=/dev/sdb1
835317+0 records in
835317+0 records out
427682304 bytes (428 MB) copied, 1.6525 s, 259 MB/s
[root@cs6 ~]# ls /mnt/data1
1.html  2.html  3.html  4.html  5.html  lost+found
    要特別注意if、of參數,如果位置寫反了,就會出大問題。
 

生成任意大小的測試文件

[root@cs6 ~]# dd if=/dev/zero of=test.data bs=1M count=2    #<= 從/dev/zero讀取數據寫入到test,dita,生成文件test,data的大小為bs*count=1M*2=2M;
2+0 records in
2+0 records out
2097152 bytes (2.1 MB) copied, 0.11628 s, 18.0 MB/s
[root@cs6 ~]# ll -h test.data
-rw-r--r--. 1 root root 2.0M May 11 15:27 test.data

制作Linux系統的ISO鏡像

    在Windows系統里制作光盤的ISO鏡像,還需要安裝其他軟件。但在Linux系統中只需要dd命令就足夠了。
    在做實驗時,如果需要將CentOS的完整系統鏡像上傳到Linux系統中,一般使用winSCP或Xshell等工具,但這是通過網絡傳輸的方式,上傳速度受限於網絡帶寬。此時可以使用dd命令,將從光驅讀取的鏡像復制到系統中,相當於光驅與磁盤對拷。
 
將光盤放入光驅之后,需要確保光驅可以正常讀取,然后執行如下命令即可實現將光盤復制到Linux硬盤的操作:
[root@cs6 ~]# ls /dev/cdrom
/dev/cdrom
[root@cs6 ~]# dd if=/dev/cdrom of=centos6_10.iso
831488+0 records in
831488+0 records out
425721856 bytes (426 MB) copied, 49.5612 s, 8.6 MB/s
#<==傳輸速度取決於光驅與磁盤之間的讀寫速度,可以看到這種方式的傳輸速度遠遠大於網絡傳輸速度。
[root@cs6 ~]# ll -h centos6_10.iso
-rw-r--r--. 1 root root 406M May 11 15:32 centos6_10.iso
 

使用dd復制文件並進行格式轉換的例子。

[root@cs6 ~]# cat test.txt
I love linux www.wenyule.top
[root@cs6 ~]# dd if=test.txt conv=ucase of=test.test_u
0+1 records in
0+1 records out
29 bytes (29 B) copied, 0.00036375 s, 79.7 kB/s
[root@cs6 ~]# cat test.test_u
I LOVE LINUX WWW.WENYULE.TOP 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM