1. 程式人生 > >磁盤管理詳解(02)

磁盤管理詳解(02)

磁盤管理

一、文件系統概念

1.文件系統是操作系統用於明確存儲設備或分區上的文件的方法和數據結構;即在存儲設備上組織文件的方法。操作系統中負責管理和存儲文件信息的軟件結構稱為文件管理系統,簡稱文件系統。

2.從系統角度來看,文件系統是對文件存儲設備的空間進行組織和分配,負責文件存儲並對存入的文件進行保護和檢索的系統。具體地說,它負責為用戶建立文件,存入、讀出、修改、轉儲文件,控制文件的存取,安全控制,日誌,壓縮, 加密等。

二、文件系統類型

1.常用的Linux文件系統:ext2, ext3, ext4, xfs(SGI), btrfs( Oracle), reiserfs, jfs(AIX),swap(交換文件系統),iso9660(光盤);

2.Windows:fat32, ntfs;

3.Unix: FFS(fast), UFS(unix), JFS2;

4.網絡文件系統:NFS, CIFS;

5.集群文件系統:GFS2, OCFS2(oracle);

6.分布式文件系統:ceph, moosefs, mogilefs, glusterfs, Lustre;

7.RAW:未經處理或者未經格式化產生的文件系統;

三、文件系統分類

1.根據其是否支持"journal"功能:

日誌型文件系統: ext3, ext4, xfs, ...

非日誌型文件系統: ext2, vfat ;

2.文件系統的組成部分:

內核中的模塊:ext4, xfs, vfat;

用戶空間的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat

3.Linux的虛擬文件系統:VFS

4.查前支持的文件系統:cat /proc/filesystems

四、創建文件系統

mkfs命令:

(1)mkfs.FS_TYPE /dev/DEVICE

FS_TYPE:ext4、xfs、btrfs、vfat...

(2)mkfs -t FS_TYPE /dev/DEVICE

-L‘LABEL‘: 設定卷標

eg1:mkfs.ext4 /dev/sdb1;

eg2:blkid /dev/sdb1;

eg3:mkfs.ext4 -b 1024 /dev/sdb1;

eg4:mkfs.ext4 -L /mnt/sdb2 /dev/sdb2(卷標名最好是和掛載的目錄名相同);

eg5:mkfs.ext4 -L /mnt/sdb3 -b 2048 /dev/sdb3

五、創建ext文件系統

mke2fs:ext系列文件系統專用管理工具

OPTION:

-t:{ext2|ext3|ext4}

-b:{1024|2048|4096}

-L:‘LABEL‘

-j: 相當於 -t ext3

註:mkfs.ext3 = mkfs -t ext3 = mke2fs -j =mke2fs -t ext3

-i #: 為數據空間中每多少個字節創建一個inode;此大 小不應該小於block的大小

-N #:為數據空間創建個多少個inode

I:一個inode記錄大小128---4096

-m #: 默認5%,為管理人員預留空間占總空間的百分比

-O FEATURE[,...]:啟用指定特性

-O ^FEATURE:關閉指定特性

六、blkid命令

blkid:查看指定塊設備的屬性信息

語法:blkid [OPTION] ...[DEVICE]

OPTION:

-U:UUID: 根據指定的UUID來查找對應的設備

-L:LABEL:根據指定的LABEL來查找對應的設備

七:e2label命令

e2lable:管理ext系列文件系統的卷標

語法:e2label DEVICE [LABEL]

eg:e2label /dev/sdb1 /mnt/sdb1

八、findfs命令

findfs:查找分區

findfs [options] LABEL=<label>

findfs [options] UUID=<uuid>

九、tune2fs命令

1.tune2fs:重新設定ext系列文件系統可調整的參數值

OPTION:

-l:查看指定文件系統超級塊信息;superblock

-L:‘LABEL‘:修改卷標

-m #:修預留給管理員的空間百分比

-j: 將ext2升級為ext3

-O: 文件系統屬性啟用或禁用, 屬性前加^,表示關閉此屬性,–O^has_journal

-o: 調整文件系統的默認掛載選項,–o^acl

-U:UUID: 修改UUID號;

2.生成UUID的命令:uuidgen

十、dumpe2fs命令

dumpe2fs:查看塊組信息

dumpe2fs -h = tune2fs -l:查看文件系統超級塊信息

十一、文件系統檢測和修復

1.因進程意外中止或系統崩潰等情況導致寫入操作非正常中止時,可能會導致文件破壞;此時,應該修復文件系統,註意:離線修復;

2.掛載的文件系統標記為“dirty”或“no clean”

3.修復工具:fsck、e2fsck

4.fsck命令

格式:

①fsck.FS_TYPE

②fsck -t FS_TYPE

OPTION:

-a:自動修復錯誤;

-r:交互式修復錯誤;

註意:FS_TYPE一定要與分區上文件類型相同;

5.e2fsck命令

e2fsck:ext系列文件專用的檢測修復工具

OPTION:

-y:對問題自動回答為yes;

-f:強行修復;

十二、文件系統掛載

1.掛載:磁盤分區要想被使用必須先掛載,所謂掛載是指將額外的分區與根文件系統上的某目錄建立關聯關系的過程(默認只有管理員才有權限),進而使得此目錄作為其它文件訪問入口的行為。如果目錄中有文件,則目錄中原有文件會被隱藏。使用mount命令掛載;

2.卸載:解除此關聯關系的過程。使用umount命令卸載;

3.卸載時:可使用設備,也可以使用掛載點;

4.掛載點:目錄一般為空;

5.mount命令

(1)掛載方法:mount DEVICE MOUNT_POINT(掛載點)

DEVICE:所要掛載的磁盤分區:

①設備文件:例如/dev/sda5

②卷標:-L ‘LABEL‘, 例如 -L ‘MYDATA‘

③UUID, -U ‘UUID‘:例如 -U ‘0c50523c-43f145e7-85c0-a126711d406e‘

④偽文件系統名稱:proc,sysfs, devtmpfs, configfs

MOUNT_POINT(掛載點):另一個文件系統訪問入口:

①事先存在;建議使用空目錄

②進程正在使用中的設備無法被卸載

(2)查看當前以掛載所有設備信息:

①mount;

②cat /etc/mtab

③cat /proc/mounts(查看內核追蹤到的已掛載的所有設備信息)

(3)mount命令常用掛載選項

OPTION:

-t vsftype:指定要掛載的設備上的文件系統類型

-r: readonly,只讀掛載;

-w: read and write, 讀寫掛載;

-n: 不更新/etc/mtab,相當於#mount;

-a:自動掛載所有支持自動掛載的設備(定義在了/etc/fstab 文件中,且掛載選項中有auto功能)

-L ‘LABEL‘: 以卷標指定掛載設備;

-U ‘UUID‘: 以UUID指定要掛載的設備;

-B, --bind: 綁定目錄到另一個目錄上;

-o options:(掛載文件系統的選項),多個選項使用逗號分隔

async:異步模式,數據寫操作先於內存完成,而後再根據某種策略同步至持久設備中;

sync:同步模式,內存更改時,同時寫磁盤;

atime/noatime:文件和目錄被訪問時是更新最近一次的訪問時間戳;

diratime/nodiratime:目錄被訪問時是更新最近一次的訪問時間戳;

auto/noauto:是否支持自動掛載,是否支持-a選項;

exec/noexec:是否允許執行此設備上的二進制程序文件;

dev/nodev:是否支持在此設備上使用設備文件;

suid/nosuid:是否支持在此設備上的文件使用suid;

remount:重新掛載,通常用於不卸載的情況下重新指定掛載選項;

ro:只讀;

rw:讀寫;

user/nouser:是否允許普通用戶掛載此設備,默認管理員才能掛載;

acl:啟用此文件系統上的acl功能,默認不支持;

註意:默認掛載選項相當於rw,suid, dev, exec, auto, nouser, async

十三、文件系統卸載

卸載:掛載點沒有被進程訪問時方可以卸載;

在卸載前最好是要查看下哪些進程正在訪問掛載的設備,可使用:fuser -v 掛載點;

如果有程序正在使用該設備,並且想中止正在此掛載點的進程,則使用:fuser -km 掛載點;

卸載命令:

umount DEVICE;

umount MOUNT_POINT;

十四、設備自動掛載

自動掛載的設備文的配置文件:/etc/fstab

1./etc/fstab:每行定義一個要掛載的文件系統,有以下6個字段:

要掛載的設備或偽文件系統

掛載點

文件系統類型

掛載選項

轉儲頻率(備份頻率)

自檢次序

2.要掛載的設備或偽文件系統:

①設備文件

②LABEL(LABEL=””)

③UUID(UUID=””)

④偽文件系統名稱(proc,sysfs)

3.掛載選項:defaults

4.轉儲頻率(備份頻率)

0:不做備份

1:每天轉儲

2:每隔一天轉儲

5.自檢次序

0:不自檢,額外創建的文件系統都無須自動自檢;

1:首先自檢;一般只有rootfs才用1

2:不同的設備可以使用同一個自檢次序

6.對於/etc/fstab配置文件寫錯的解決辦法:

①/etc/fstab文件裏寫載設備等其它選項時一定要正確填寫,否則系統重啟後啟動不起來,會一直停一個界面,如下圖所示:

技術分享

②解決辦法;界面會有提示讓你輸入管理員root密碼,正確輸入密碼之後會進入一個終端界面,輸入以下命令重新掛載根,mount-o remount,rw /,輸入完這條命令後就可以修改./etc/fstab裏寫錯的選項,然後保存重啟即可。

技術分享


十五、利用文件,實現文件系統

步驟:

         ①dd if=/dev/zero of=/testdir/partfile bs=1M count=500
          ##創建500M文件
          
         ②ll-h /testdir/partfile
         
         ③mkfs.ext4 /testdir/partfile
         ##格式化
         
         ④blkid/testdir/partfile
         ##查看文件系統信息
         
         ⑤mkdir /mnt/partfile
         
         ⑥mount -o loop /testdir/partfile /mnt/partfile
         ##掛載,臨時生效
         
         ⑦把它寫進/etc/fstab文件裏實現自動掛載,掛載選項不能寫defaults,而要寫loop;默認掛
         載到/dev/lop0設備;
         /testdir/partfile       /mnt/partfile   ext4    loop 0  0
          ##自動掛載,永久生效


十六、手工指定掛載的loop設備

步驟:

       ①losetup /dev/loop2 /testdir/partfile
       ##指定掛載設備關聯至掛載點
       
       ②mkdir /mnt/partfile2
       ##創建掛載點
       
       ③mount /dev/loop2 /mnt/partfile2
       ##掛載
       
       ④losetup -a
       ##查看掛載生效的loop設備

十七、目錄掛載目錄

步驟:

          ①mkdir /mnt/boot
          ②mount -B /boot /mnt/boot
          ③把它寫進/etc/fstab配置文件實現自動掛載,註意這裏的文件類型和掛載選項要寫成none和bind,如下所示:
          /boot      /mnt/boot      none      bind       0     0
          ④mount -a重新加載/etc/fstab文件中的所有掛載選項


十八、掛載交換分區

1.交換分區是系統RAM的補充;

2.啟用:swapon

語法:swapon [OPTION]… [DEVICE]

OPTION:

-a:激活所有的交換分區;

-p PRIORITY:指定優先級(用數字表示)

在/etc/fstab裏指定,Pri=value

-s:查看所有生效的交換分區(等同於cat /proc/swap)

3.禁用swapoff

語法:swapoff [OPTION]… [DEVICE]

4.示例:

              (1)分區:
                     fdisk /dev/sdb;大小為2個G的分區,並該分區的ID,ID改為82
                     
              (2)格式化:
                     mkswap -L swap_sdb1 /dev/sdb
                     blkid
                     
              (3)掛載;寫進/etc/fstab配置文件實現自動掛載
                     /dev/sdb1 swap swap defaults 0 0
                     Swapon -a
                     Swapon -s
                     
              (4)調整優先級,可以可以用命令臨時指定,要想永久生效要寫進/etc/fstab配置文件裏,
              例如:
                     /dev/sdb1 swap swap pri=100 0 0
                     註:優先級要想生效先關閉設備,然後再開啟設備
                     swapoff /dev/sdb1
                     Swapon -a

十九、swap的優先級

①用戶可以給某個swap指定一個0到32767的優先級;

如果用戶沒有指定,那麽核心會自動給swap指定一個優先級,這個優先級從-1開始,每加入一個新的沒有用戶指定優先級的swap,會給這個優先級減一;

先添加的swap的缺省優先級比較高,除非用戶自己指定一個優先級,而用戶指定的優先級(是正數)永遠高於核心缺省指定的優先級(是負數);

優化性能:分布存放,高性能磁盤存放;

二十、文件啟用swap

步驟:

          ①dd if=/dev/zero of=/testdir/swapfile bs=1M count=1024
          ##創建1G大小的文件
          
          ②mkswap /testdir/swapfile
          ##格式化
          
          ③blkid /testdir/swapfile
          ##查看塊設備信息
          
          ④寫進/etc/fstab配置文件實現自動掛載
          /testdir/swapfile    swap      swap      defaults  0     0
          
          ⑤swapon -a
          ##激活swap分區
          
          ⑥swapon -s
          ##查看生效swap分區


二十一、刪除swap

Swapoff/dev/sdb1

刪除/etc/fstab相應記錄

刪除分區和文件

二十二、移動設備使用

1.USB使用:

              mkdir /mnt/usb
              mount /dev/sdf4 /mnt/usb
              Sync(執行三次以上)
              註:USB設備名是隨機生成的,可使用df命令查看;

2.光盤使用:

              eject:彈出光驅
              eject -t:彈入光驅


3.光盤制作成ISO文件

              cp /dev/sr0 /testdir/centos.iso
              mkdir /mnt/iso
              mount /testdir/centos.iso /mnt/iso


4.將目錄打包成ISO文件

              mkisofs -r -o etc.iso /etc
              mkdir /mnt/etc
              mount etc.iso /mnt/etc

二十三、free命令

free:內存及交換分區空間使用狀態;

語法:free [OPTION]

OPTION:

-m:以MB為單位;

-g:以GB為單位;

-h:以可讀性較高的方式來顯示信息;

技術分享

其中個選項的含義:

①Mem:物理內存的使用情況;

②Swap:交換分區使用的情況;

③-/+ buffers/cache:表示物理內存在不考慮緩沖和緩存占據空間的使用情況;

④buffer:緩沖,用來緩存寫;

⑤cache:緩存,用來緩存讀;

二十四、df命令

df:文件系統空間占用等信息的查看工具

語法:df [OPTION]... [FILE]...

OPTION:

-H:與-h參數相同,但在計算時,1k=1000,而不是1k=1024;

-T 文件系統類型;

-h: human-readable(以可讀性較高的方式來顯示信息);

-i:顯示inode使用信息而非默認的磁盤空間使用信息;

-P: 以Posix兼容的格式輸出;

二十五、du命令

du:查看某目錄空間占用情況

語法:du [OPTION]... DIRECTORY

OPTION:

-h:human-readable(以可讀性較高的方式來顯示信息);

-s:整個目錄大小;

二十六、dd命令

dd::convert and copy a file, 用指定大小的塊拷貝一個文件,並在拷貝的同時進行指定的轉換

用法:dd if=/PATH/FROM/SRC of=/PATH/TO/DEST

OPTION:

        bs=#:block size, 復制單元大小;
        count=#:復制多少個bs; 
        if=file:從所命名文件讀取而不是從標準輸入;
        of=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 
        ##磁盤拷貝
        
        dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1 
        ##備份MBR
        
        dd if=/dev/zero of=/dev/sdabs=64 count=1 seek=446 
        ##破壞MBR中的bootloader
        
        有二進制文件 fileA, size>2K。現在想從第64個字節位置 開始讀取,需要讀取的大小是
        128Byts。又有fileB, 想把上 面讀取到的128Bytes寫到第32個字節開始的位置,替換 128Bytes
        ,請問如何實現? 
        dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc


    備份:
        dd if=/dev/sdx of=/dev/sdy 
        ##將本地的/dev/sdx整盤備份到
        
        /dev/sdy dd if=/dev/sdx of=/path/to/image 
        ##將/dev/sdx全盤數據備份到指定路徑的image文件
        
        dd if=/dev/sdx | gzip >/path/to/image.gz
        ##備份/dev/sdx全盤數據,並利用gzip工具進行壓縮,保存到指定路徑 
        
    恢復:
        dd if=/path/to/image of=/dev/sdx 
        ##將備份文件恢復到指定盤
        
        gzip -dc /path/to/image.gz | dd of=/dev/sdx
        ##將壓縮的備份文件恢復到指定盤


    拷貝內存資料到硬盤:
        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將無法掛載,創建和拷貝操作無法執行。其中,/dev/urandom可以寫為/dev/zero;


    得到最恰當的block size:
        dd if=/dev/zero bs=1024 count=1000000of=/root/1Gb.file
        
        dd if=/dev/zero bs=2048 count=500000of=/root/1Gb.file
        
        dd if=/dev/zero bs=4096 count=250000of=/root/1Gb.file
        
        dd if=/dev/zero bs=8192 count=125000of=/root/1Gb.file
        通過比較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錯誤。當這種情況影響到硬盤的第一個扇區時 ,可能導致硬盤報廢。上邊
    的命令有可能使這些數據起死回生。且這個過程是安全,高效的。















本文出自 “亞成-另一個LINUXER” 博客,請務必保留此出處http://yacheng0316.blog.51cto.com/11878883/1962164

磁盤管理詳解(02)