Linux基礎知識之磁盤及文件系統管理(二)

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

(0)
sjsirsjsir
上一篇 2016-08-29
下一篇 2016-08-29

相關推薦

  • 初識linux內核編譯

    編譯內核前提:        1、準備開發環境。        2、獲取目標主機上硬件設備的相關信息。        3、獲取目標主機系統功能的相關信息,例如要啟用的文件系統。 &…

    Linux干貨 2016-09-13
  • PHP字符串的編碼問題

        大家都知道,不同字符編碼,其在內存占用的字節數不一樣。如ASCII編碼字符占用1個字節,UTF-8編碼的中文字符是3字節,GBK為2個字節。     PHP 也自帶幾種字符串截取函數,其中常用到的就是 substr 和 mb_substr。     使用substr截取中…

    Linux干貨 2015-10-22
  • Linux磁盤管理

     I/O Ports:I/O設備地址   一切皆文件:             poen(),read(),write(),close()   設備類型:     &nb…

    Linux干貨 2016-08-29
  • net25 第16周作業

    1、源碼編譯安裝LNMP架構環境; yum groupinstall -y ‘Development Tools’ ‘Server Platform Development’ 編譯nginx ~]# yum install -y openssl-devel pcre-devel ~]# useradd ngin…

    Linux干貨 2017-05-15
  • 馬哥教育網絡班22期+第7周課程練習

    week7: 1、創建一個10G分區,并格式為ext4文件系統;    (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;    (2) 掛載至/data/mydata目錄,要求掛載時禁止程…

    Linux干貨 2016-09-26

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-29 13:08

    文章對磁盤管理要點記錄的很詳細,但是更重要的是要進行一些具體操作,只有在實踐中,我們才能發現問題,總結問題,形成自己的經驗,這樣我們才能有收獲更多,學到更多的東西。

欧美性久久久久