天天看點

Linux磁盤管理

CentOS 5上以柱面劃分分區,最小為8M

讓我們先來了解在Linux中磁盤的命名方式:

    命名: /dev/DEV_FILE

    IDE: /dev/hd(現在很少用IDE的硬碟,可以忽略)

    SCSI:/dev/sd

        sd:表示scsi硬碟

        a:表示第一塊磁盤,b表示第二塊磁盤.......以此類推

            例:/dev/sda,:

             /dev/sdb, ...

    同一裝置上的不同分區: 1,2, ...

        MBR分區格式最多有4個主分區.或者3個主分區1個擴充分區.第一個邏輯分區必須是從5開始,沒有為什麼這是規定

        例:/dev/sda1:表示第一塊磁盤的第一個主分區

          /dev/sda5:表示第一塊磁盤的第一個邏輯分區

Linux上有兩種分區方式MBR和GPT

Linux磁盤管理

MBR分區

    管理工具

            fdisk

    特點:

      【32位扇區數,分區不超過2T】其實大家應該知道,其實作在大多數電腦也是以MBR分區的,

    GPT特點

     支援128個分區,64位,支援8Z 64Z

MBR分

GPT: 建立完以後一定要記得同步,

gdisk:也可以管理MBR分區格式,但是一般不推薦這麼用,畢竟專一的最好

磁盤管理

裝置檔案

裝置類型

塊裝置

字元裝置

裝置号碼

主裝置号:major number

次裝置号:minor number

硬碟接口類型

并行:ide 133MB\s

scsi:640MB\s 

序列槽:

SATA

SAS

USB

`````/dev/sd

a-z

主分區:1-3

擴充分區:4

邏輯分區:必須從5.....

硬碟結構

硬碟是後一個一個的扇區和磁道組成

扇區:一個扇區“512”位元組

柱面:對應的磁道為一個柱面

簇:  兩個扇區為一個“簇”

63x512x1024x256=7.85G

使用分區空間

磁盤分區:

優點:

1、隔離系統和程式

2、安裝多個0S

3、提高修複速度

4、實作磁盤空間配額限制

5、優化I/O性能

分區管理:

blkid:、

塊裝置屬性資訊檢視

blkid [OPTION]... [DEVICE]

-U UUID: 根據指定的UUID來查找對應的裝置

-L LABEL:根據指定的LABEL來查找對應的裝置

檔案系統類型

分區工具fdisk和gdisk

fdisk:

建立MBR分區,也支援GPT,一塊硬碟,最多隻能管理15個分區

fdisk -l[-u][device]

]# fdisk /dev/sdb \\對這塊裝置進行操作

]# fdisk -l \\顯示所有的塊裝置

gdisk: \\子指令跟fdisk基本相似,是以我們也可以用gdisk來管理MBR分區,但是不推薦這麼管理,畢竟不同的分區用不同的管理工具更好

建立GPT分區

   p \\分區清單

t \\更改分區類型

n \\建立新分區

d \\删除分區

w \\保持并推出

q \\不儲存退出

partprobe:

重新設定記憶體中的核心分區表

同步分區表

檢視核心識别新的分區

]# cat /proc/partations

新建立的分區一般都沒有被記憶體識别,所有在參加完新的分區以後通知核心重新讀取硬碟分區表

新增分區用

partx -a -n M:N /dev/DEVICE

kpartx -a /dev/DEVICE -f: force

删除分區用

partx -d -n M:N /dev/DEVICE

centos6: –nr N-M

#因為在centos6上partprobe一直存在bug所有不推薦在6上使用partprobe指令,但是在7上已經解決了這個問題

parted指令

檔案系統

檔案系統是作業系統用于明确儲存設備或分區上的檔案的方法和資料結構;即在儲存設備上組織檔案的方法。作業系統中負責管理和存儲檔案資訊的軟體結構稱為檔案管理系統,

簡稱檔案系統。

? 從系統角度來看,檔案系統是對檔案儲存設備的空間進行組織和配置設定,負責檔案存儲并對存入的檔案進行保護和檢索的系統。具體地說,它負責為使用者建立檔案,存入、讀出、修改、轉儲檔案,控制檔案的存取,安全控制,日志,壓縮,

加密等。

ext2,ext3,ext4,xfs,btrfs,reiserfs,jfs,swap

swap:互動分區

CD光牒:iso9660

Windows: fat32, ntfs

Unix: FFS( fast) , UFS( unix) , JFS2

網絡檔案系統: NFS, CIFS

叢集檔案系統: GFS2, OCFS2( oracle)

分布式檔案系統: ceph, moosefs, mogilefs, glusterfs,Lustre

RAW:未經處理或者未經格式化産生的檔案系統

日志型檔案系統:

ext3,ext4,xfs,...

非日志型檔案系統:

ext2,vfat

檔案系統的組成部分:

核心中的子產品: ext4, xfs, vfat

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

Linux的虛拟檔案系統: VFS

查前支援的檔案系統: cat /proc/filesystems

建立檔案系統

mkfs:

# mkfs.FS_TYPE /dev/DEVICE

# mkfs FS_TYPE /dev/DEVICE

FS_TYPE:

ext4

xfs

btrfs

vfat

-L 'LATEL':設定卷标

建立ext檔案系統

這個指令是專門用來建立ext檔案系統的指令,不要和mkfs混淆

mke2fs:

-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

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

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

-O ^FEATURE:關閉指定特性

檔案系統标簽

e2label:

管理ext系列檔案系統的LABEL

# e2abel DEVICE [LABEL]

findfs:查找分區

findfs [options] LABEL=<label>

dinfs [options] UUID=<uuid>

tune2fs

tune2fs:重新設定ext系列檔案系統可調整參數的值

-l: 檢視指定檔案系統超級塊資訊; super block

-L 'LABEL': 修改卷标

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

-j: 将ext2更新為ext3

-O: 檔案系統屬性啟用或禁用, –O ^has_journal

-o: 調整檔案系統的預設挂載選項,–o ^acl

-U UUID: 修改UUID号;

dumpe2fs:

用于列印“ext2/ext3/ext4”檔案系統的超級塊和快組資訊

-b:列印檔案系統中預留的塊資訊; 

-ob<超級塊>:指定檢查檔案系統時使用的超級塊; 

-OB<塊大小>:檢查檔案系統時使用的指定的塊大小; 

-h:僅顯示超級塊資訊; 

-i:從指定的檔案系統映像檔案中讀取檔案系統資訊; 

-x:以16進制格式列印資訊塊成員。

檔案系統檢測和修複

常發生于當機或者非正常關機之後

挂載為檔案系統标記為“ dirty”

fsck: File System Check

fsck.FS_TYPE

fsck -t FS_TYPE

-a: 自動修複錯誤

-r: 互動式修複錯誤

注意: FS_TYPE一定要與分區上已經檔案類型相同;

e2fsck: ext系列檔案專用的檢測修複工具

-y:自動回答為yes

-f:強制修複

mount

裝置想要能夠被通路就必須得挂載一個目錄下面,通過通路這個目錄才能夠對這個行情進行操作

挂載:将額外檔案系統與根檔案系統某現存的目錄建立起關聯系,進而使得此目錄做為其它檔案通路入口的行為

解除安裝:為解除此關聯關系的過程

把裝置關聯挂載點: mount Point

解除安裝時:可使用裝置,也可以使用挂載點

umount

挂載點下原有檔案在挂載完成後會被臨時隐藏

挂載點目錄一般為空

mount指令挂載檔案系統

mount DEVICE  DIR

通過檢視/etc/mtab檔案顯示目前意挂載的所有裝置

mount [-fnrsvw] [-t vfstype] [-o options] device dir

DEVICE:

1、裝置檔案

2、卷标

3、UUID

4、僞檔案系統名稱:proc,sysfs,devtmpfs,configfs

挂載點:

事先存在,使用空目錄

程序中正在使用的裝置無法被解除安裝

選項:

-t vsftype:指定要挂載的裝置上的檔案系統類型

-r:隻讀挂載

-w:讀寫挂載(預設)

-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和sgid權限

remount:重新挂載

ro:隻讀

rw: 讀寫

user/nouser:是否允許普通使用者挂載此裝置,預設管理者才能挂載

acl:啟用此檔案系統上的acl功能

Defaults:相當于rw, suid, dev, exec, auto, nouser, async

選項

解除安裝

檢視挂載情況:

#findmnt MOUNT_POINT

檢視正在通路指定檔案系統的程序:

#lsof MOUNT_POINT

#fuser -v MOUNT_POINT

終止所有在正通路指定的檔案系統的程序:

# fuser -km MOUNT_POINT

解除安裝:

# umount DEVICE

# umount MOUNT_POINT

挂載點和/etc/fstab

在系統後保留檔案系統體系

可在設定蘭使用卷标

使用mount -a 挂載/etc/fstab下的所有檔案系統

/etc/fstab 每行定義一個要挂載的檔案系統;

格式:

要挂載的裝置或僞檔案系統(裝置名、卷标、UUID)、挂載點、檔案系統類型、挂載選項、轉儲頻率 自檢次數

DEVICE/dir /path/dir fstab  

 挂載選項: defaults

 轉儲頻率: 0 :不做備份

1 :每天轉儲

2 :每隔一天轉儲

 自檢次序: 0 :不自檢

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

SWAP分區

當系統記憶體空間被占滿時,系統将自動把磁盤交換分區的一部分空間用作系統記憶體,一般是系統記憶體空間的2倍

配置:

基本設定包括:

建立交換分區或者檔案

使用mkswap 寫入特殊簽名

在 在/etc/fstab 檔案中添加适當的條目

使用swapon -a 

級别:

磁盤上啟用了很多swap分區,讓這些swap分區有先後的使用順序

1、系統自動指定一個優先級

                -1~~~~~~

            2、新加入的自動減一(沒有指定優先級的swap)

            3、先添加的swap 的預設優先級比較高,除非使用者自己指定一個優先級,而使用者指定的優先級( 是正數) 永遠高于核心預設指定的優先級( 是負數)。 

            4、分布存放,高性能磁盤存放

CD光牒的使用

    在圖形環境下自動啟動挂載/run/media/<user>/<label>

 否則就必須被手工挂載

        mount /dev/cdrom /mnt/

eject 指令解除安裝或彈出磁盤

 建立ISO 檔案

        cp /dev/cdrom /root/centos7.iso

        kisofs -r -o /root/etc.iso /etc

 刻錄CD光牒

        odim –v –eject centos.iso

挂載USB 媒體

 被核心探測為SCSI 裝置

        /dev/sdaX 、/dev/sdbX 、或類似的裝置檔案

    在圖形環境中自動挂載

        圖示在[ 計算機] 視窗中建立

    挂載在/run/media/<user>/<label>

         手動挂載

        mount /dev/sdb1 /mnt

常見工具

 記憶體空間使用狀态:

        free [OPTION]

            -m:  以MB 為機關

            -g:  以GB 為機關

 檔案系統空間占用等資訊的檢視工具:

        df [OPTION]... [FILE]...

            -H 1000

            -T  檔案系統類型

            -h: human-readable

            -i :inodes instead of blocks

            -P:  以Posix 相容的格式輸出

 檢視某目錄總體空間占用狀态:

        du [OPTION]... DIR

            -s: summary

dd 指令:convert and copy a file

 用法:

        dd if =/PATH/FROM/SRC of=/PATH/TO/DEST

            bs=# :block size,  複制單元大小

            ount=# :複制多少個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

        備份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

        備份:

                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 工具進行壓縮,儲存到指定路徑

        恢複:

            dd if=/path/to/p_w_picpath of=/dev/sdx

                将備份檔案恢複到指定盤

            gzip -dc /path/to/p_w_picpath.gz | dd of=/dev/sdx

                将壓縮的備份檔案恢複到指定盤

        拷貝記憶體資料到硬碟

            dd if=/dev/mem of=/root/mem.bin bs=1024

            将記憶體裡的資料拷貝到root 目錄下的mem.bin 檔案

     從CD光牒拷貝iso 鏡像

            dd if=/dev/cdrom of=/root/cd.iso

            拷貝CD光牒資料到root 檔案夾下,并儲存為cd.iso 檔案

     銷毀磁盤資料

            dd if=/dev/urandom of=/dev/sda1

            利用随機的資料填充硬碟,在某些必要的場合可以用來銷毀資料。執行此操作以後,/dev/sda1 将無法挂載,建立和拷貝操作無法執行。

        得到最恰當的block size

            dd if=/dev/zero bs=1024 count=1000000

            of=/root/1Gb.file

            dd if=/dev/zero bs=2048 count=500000

            dd if=/dev/zero bs=4096 count=250000

            dd if=/dev/zero 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 錯誤。當這種情況影響到硬碟的第一個扇區時,可能導緻硬碟報廢。上邊的指令有可能使這些資料起死回生。且這個過程是安全,高效的

練習

 1、建立一個2G的檔案系統,塊大小為2048byte, 預留1%可用空間,檔案系統ext4,卷标為TEST,要求此分區開機後自動挂載至/testdir目錄,且預設有acl挂載選項

2、寫一個腳本,完成如下功能:

    (1) 列出目前系統識别到的所有磁盤裝置;

    (2) 如磁盤數量為1,則顯示其空間使用資訊;

    否則,則顯示最後一個磁盤上的空間使用資訊;

示範步驟

        分區啟動swap

            1、fdisk /dev/sdb #建立一個分區

            2、mkswap -L SWAP_SDB1 /dev/sdb1 #格式化swap

            3、vim /etc/fstab #寫入/etc/fstab

                    LABEL=SWAP_SDB1 swap swap defaults 0 0 #格式

            4、swapon -s #檢視以啟用的swap

            5、swapon -a #啟用現有的分區

        檔案啟動swap

            1、dd if=/dev/zero of=/testidr/swapfile bs=1M count=1024

            2.mkswap /testdir/swapfile

            3.vim /etc/fstab

                /testdir/swapfile swap swap defaults 0 0

            4.swapon -s 

            5.swapon -a 

        删除swap

            swapoff /dev/sdb1 或swapoff /testdir/swapfile ##禁用swap分區

            删除/etc/fstab相應記錄

            删除分區和檔案

        建立iOS檔案

            cp /dev/sr0 /testdir/centos.iso

        挂載iso檔案

            mount -o loop /testdir/centos7.iso /mnt/iso

        将目錄打包成iso檔案

            mkisofs -r -o etc.iso /etc/

繼續閱讀