8.25_Linux磁盤管理(一)

  磁盤,計算機最常見的存儲硬件設備。對Linux而言,其哲學思想之一就是一切皆文件,因此linux之上所有設備的操作都是通過文件接口來實現的,也就是說在訪問設備的時候就如同訪問一個文件一樣,因爲他們使用的都是文件系統接口。


向磁盤中寫入數據的操作過程

  首先硬件設備在系統上會映射成一個一個文件,我們在對硬件中寫入數據就相當於在打開一個文件中去執行讀寫操作,對於程序而言會先open()一個文件,然後執行read()或者write()操作,最後關閉文件close()。


設備類型

塊設備:block,存取單位“塊”,如磁盤/dev/sda

字符設備:char,存取單位“字符”,如/dev/null(linux裏面的黑洞設備,放什麼進去都會消失)

wKioL1e_8_PhXUguAAAnQnvJKoc644.png

設備文件

每一個設備都有一個文件作爲它的訪問入口,此文件我們稱之爲設備文件;該文件關聯至一個設備驅動,進而能夠跟與之對應的硬件設備進行通信。


設備號碼

用來標識設備,不同類別的設備有不同的設備號,同一類別的設備有不同的設備或多個設備,因此就有主設備號和次設備號。

主設備號:major number,標識設備類型

次設備號:minor numbei,標識同以類型下的不同設備


wKioL1e_-B_yh4m0AADXwqQj_5Y662.png

磁盤的接口類型:每一種的接口傳輸速率都是不同的

並口:數據傳輸有n根線並行傳輸的

    IDE:133MB/S

    SCSI:640MB/S

串口:數據傳輸有一根線按照順序傳輸

    SATA:6Gbps(第三代sata傳輸速度)

    SAS:6Gbps

    USB:480MB/s


磁盤設備的設備文件命令:

    IDE:/dev/hd

    SCSI、SATA、SAS、USB:/dev/sd


不同設備表示方法:在設備文件名後面追加一些字母a-z來表示

    /dev/sda,/dev/sdb,/dev/sdc


同一設備上的不同分區,採用數字遞增的方式

    /dev/sda1,/dev/sda2...


硬盤結構

wKioL1e___zBj__mAAT2nIjY2vY504.png

head:磁頭

track:磁道,是由廠商劃分好的

secotr: 扇區,每一個512bytes,固定角速度的設備,任意磁盤上的任意扇區,讀取的平均時間稱爲平均尋道時間

cylinder: 柱面chs


磁盤分區


爲什麼要分區?

  優化I/O性能

  實現磁盤空間配額限制

  提高修復速度

  隔離系統和程序

  安裝多個OS

  採用不同文件系統


兩種分區方式:MBR,GPT


MBR: Master Boot Record,1982年創建,使用32位表示扇區數,分區不超過2T

MBR使用legacy的引導方式啓動


如何分區?:按柱面

0磁道0扇區:512bytes

    446bytes: boot loader 系統引導

    64bytes:分區表,其中每16bytes:標識一個分區,可以有4個主分區,或者3個主分區1個擴展分區

     2bytes: 55AA,判斷有無分區

4個主分區;3主分區+1擴展(N個邏輯分區)

wKiom1fADnyxqkcRAAEmGDGByD8129.png

wKioL1fAEnWjZaEtAAFpNqcP5ac513.png


GPT:GUID(Globals Unique Identifiers)partition table

支持128個分區,使用64位,支持8Z(512Byte/block )64Z (4096Byte/block)

使用128位UUID 表示磁盤和分區GPT分區表自動備份在頭和尾兩份,並有CRC校驗位

支持2TB以上的硬盤分區

GPT引導需要UEFI (統一擴展固件接口)硬件支持,使操作系統啓動


wKiom1fAGQHBNLmMAAE0BXGzOGM593.jpg


分區管理

列出塊設備

lsblk

wKiom1fAGcbBCcmkAABhOEsmFfg229.png

創建分區使用:

    fdisk創建MBR分區,也支持GPT,對於一塊硬盤,最多隻能管理15分區

    gdisk創建GPT分區

    GNU parted高級分區操作(創建、複製、調整大小等等)

partprobe-重新設置內存中的內核分區表版本


分區工具fdisk和gdisk

fdisk /dev/sd*

gfisk /dev/sd* 類fdisk 的GPT分區工具(gdisk命令參考fdisk,大體是一樣的)

# fdisk -l [-u] [device...]

fdisk子命令:

    p 分區列表

    t 更改分區類型

    n 創建新分區

    d 刪除分區

    w 保存並退出

    q 不保存並退出


示例:創建一個分區

輸入fdisk /dev/sdb對sdb磁盤進行分區,按m表示查看幫助信息

wKioL1fAKN3Djz0AAACfpt_m53Y596.png

分區前按p查看一下磁盤信息

wKioL1fAKN3BvxuvAABHskQTbIU795.png

按n,創建一個新的分區,按p,創建一個主分區,1表示主分區編號 ,+10G表示該分區爲10G

wKiom1fAKN6w7lImAACIU1rk4ak220.png

創建然查看一下確認一下創建的磁盤信息

wKiom1fAKN6jkhMLAABQr1jgLzA143.png

最後按w,保存退出,如果不店保存退出的話,上面的操作是不會生效的,然後再輸入lsblk再確認

wKiom1fAKYnT2xktAABtce0hkqA312.png


同步分區表

查看內核是否已經識別新的分區:

   # cat /proc/partations

wKioL1fAKtHgJa_wAABKB_vHuss951.png

通知內核重新讀取硬盤分區表

CentOS 6使用:

新增分區用

     partx -a /dev/DEVICE 

    kpartx -a /dev/DEVICE -f: force

CentOS 6新增分區同步示例:

wKioL1fALp-CmRdFAAC2EI4tHD4344.png

wKioL1fAM7PA1qFbAAB-vxJlLL4663.png

刪除分區用(CentOS 6用)

  partx-d --nr N-M /dev/DEVICE (N-M指分區的minor,如果要刪1-5的話就輸入1-5)

wKioL1fAMkbiDbiWAACq2zKIU7c129.png

CentOS 5,7: (CentOS5和7新增和刪除都一條命令即可,CentOS 6此命令有bug不能用)

使用partprobe 示例 partprobe [/dev/DEVICE]

此處因爲上面分區已經同步完成,所以這裏沒什麼用,一般來說,只有舊硬盤同步的時候會報錯,新的硬盤一般報錯的機率比較少,所以舊的硬盤可能要同步多次纔會顯示出來

wKiom1fALKCAH3LMAAAzpmRlxpA706.png


parted命令

parted的操作都是實時生效的,小心使用,建議不要使用,大家瞭解即可

用法:parted [選項]... [設備[命令[參數]...]...]

    parted /dev/sdb mklabel gpt|msdos 此命令用於創建gpt或者msdos的分區

    parted /dev/sdb print 顯示/dev/sdb磁盤信息

    parted /dev/sdb mkpart primary 1 200 (默認M) 創建一個200M的分區

    parted /dev/sdb rm 1 刪除/dev/sdb序列號爲1的分區

    parted -l 顯示所有分區


此命令不建議使用,所以這裏就不做示例說明了,需要使用的話大家參考以上命令格式即可


文件系統

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

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


文件系統類型

Linux文件系統: :ext2(Extended file system), ext3, ext4, xfs(SGI), btrfs(Oracle)              reiserfs, jfs(AIX), swap(虛擬內存),VFS(虛擬化文件系統)

光盤:iso9660

Windows:fat32, ntfs

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

網絡文件系統:NFS, CIFS

集羣文件系統:GFS2, OCFS2(oracle)

分佈式文件系統:ceph, moosefs, mogilefs, glusterfs, Lustre

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


文件系統分類

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

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

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

文件系統的組成部分:

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

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

Linux的虛擬文件系統:VFS

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


VFS作用:

  VFS的作用就是採用標準的Unix系統調用讀寫位於不同物理介質上的不同文件系統。VFS是一個可以讓open()、read()、write()等系統調用不用關心底層的存儲介質和文件系統類型就可以工作的粘合層。在古老的DOS操作系統中,要訪問本地文件系統之外的文件系統需要使用特殊的工具才能進行。而在Linux下,通過VFS,一個抽象的通用訪問接口屏蔽了底層文件系統和物理介質的差異性。

  每一種類型的文件系統代碼都隱藏了實現的細節。因此,對於VFS層和內核的其它部分而言,每一種類型的文件系統看起來都是一樣的。


創建文件系統

mkfs命令:(make file system)

 (1) # mkfs.FS_TYPE /dev/DEVICE  =mkfs -t FS_TYPE (FS-TYPE ext4、xfs、btrfs 等)

     示例:msfs.ext4 /dev/sda

 (2) # mkfs -t FS_TYPE /dev/DEVICE

    -L 'LABEL': 設定卷標


示例:將/dev/sda1的文件系統創建爲ext4

wKioL1fCdsbg70izAACfac3_AkU935.png

注意:CentOS 7默認的文件系統是xfs,如果轉成ext4,有可能會造成文件系統破壞導致開不了機


創建ext文件系統

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

  -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:關閉指定特性, 示例.關閉日誌功能 mke2fs -O ^has_journal /dev/sdb1


示例:常用選項說明

wKiom1fCfUCzw90pAADuiqr_L5w579.png


文件系統標籤

指向設備的另一種方法,與設備無關

blkid:塊設備屬性信息查看

blkid [OPTION]... [DEVICE]

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

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

示例:

wKiom1fCg1ShD59wAACketusFP8696.png


e2label:管理ext系列文件系統的LABEL

# e2label DEVICE [LABEL] 

示例:

wKiom1fCg7KQpOOZAAAhn9xhOns279.png


findfs:查找分區

findfs[options] LABEL=<label>

findfs[options] UUID=<uuid>

wKiom1fChDexsF-IAAAdnAdM844900.png


tune2fs

tune2fs [option] DEVICE:重新設定ext系列文件系統可調整參數的值

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

-L 'LABEL':修改卷標

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

-j: 將ext2升級爲ext3

-O: 文件系統屬性啓用或禁用,–O ^has_journal

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

-U UUID: 修改UUID號,可以使用uuidgen命令獲取一個隨機的UUID

wKiom1fCh0PDtkeFAAEQvW2ae_Y736.pngwKiom1fCh2-AnoTcAABa2UL6P2o115.png

dumpe2fs [option] DEVICE:此命令相當於 tune2fs -l DEVICE

-h:查看超級塊信息(分組信息),分區用分組管理


超級塊


什麼是超級塊?

  超級塊(superblock)的作用是存儲文件系統的大小、有多少是空的和已經填滿的佔多少,以及它們各自的總數和其他諸如此類的信息。要使用一個分區來進行數據訪問,那麼第一個要訪問的就是超級塊。所以,如果超級塊壞了,那磁盤基本就沒救了。

  超級塊佔用第一號物理塊,是文件系統的控制塊,超級塊包括:文件系統大小、空閒塊數目、空閒塊索引表、空閒inode節點數目、空閒inode節點索引表、封鎖標記等。超級塊是系統爲文件分配存儲空間、回收存儲空間的依據。

  所以爲了防止超級塊數據損壞,就需要對超級塊數據進行備份,以便於損壞時可以恢復。


超級快和inode_table關係圖

wKioL1fCiJXgfnTFAAI5RffCXPc959.png

什麼是超級塊?

  超級塊(superblock)的作用是存儲文件系統的大小、有多少是空的和已經填滿的佔多少,以及它們各自的總數和其他諸如此類的信息。要使用一個分區來進行數據訪問,那麼第一個要訪問的就是超級塊。所以,如果超級塊壞了,那磁盤基本就沒救了。

  超級塊佔用第一號物理塊,是文件系統的控制塊,超級塊包括:文件系統大小、空閒塊數目、空閒塊索引表、空閒inode節點數目、空閒inode節點索引表、封鎖標記等。超級塊是系統爲文件分配存儲空間、回收存儲空間的依據。

  所以爲了防止超級塊數據損壞,就需要對超級塊數據進行備份,以便於損壞時可以恢復。


文件系統檢測和修復

常發生於死機或者非正常關機之後(windows操作系統崩潰後系統也會開機自檢原理一樣)

掛載爲文件系統標記爲“dirty”

fsck: File System Check

  fsck.FS_TYPE [option] DEVICE

    -t FS_TYPE

    -a: 自動修復錯誤

    -r: 交互式修復錯誤

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

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

  -y:自動回答爲yes

  -f:強制修復


示例:修復損壞的磁盤

wKiom1fClGLjx5e4AABHdSHxM3E088.png

wKiom1fClGOzqnXdAABtCsy31M0054.png


掛載mount

掛載:將額外文件系統與根文件系統某現存的目錄建立起關聯關係,進而使得此目錄做爲其它文件訪問入口的行爲

卸載:爲解除此關聯關係的過程

把設備關聯掛載點:mount DEVICE MOUNT_POINT

卸載時:可使用設備,也可以使用掛載點 umount DEVICE

掛載點下原有文件在掛載完成後會被臨時隱藏

掛載點目錄一般爲空


查看掛載情況:

  findmntMOUNT_POINT

查看正在訪問指定文件系統的進程:

  lsofMOUNT_POINT

  fuser -v MOUNT_POINT

終止所有在正訪問指定的文件系統的進程:

  fuser -km MOUNT_POINT

卸載:

  umountDEVICE

  umountMOUNT_POINT


用mount命令掛載文件系統

掛載方法:mount DEVICE MOUNT_POINT

mount:通過查看/etc/mtab文件顯示當前已掛載的所有設備

    查看內核追蹤到的已掛載的所有設備:

      cat /proc/mounts

mount [option]...[-t FSTYPE] [-o option] DEVICE MOUNT_POINT

  DEVICE:指明要掛載的設備;

   (1) 設備文件:例如/dev/sda5

   (2) 卷標:-L 'LABEL',例如-L 'MYDATA'

   (3) UUID, -U 'UUID':例如-U '0c50523c-43f1-45e7-85c0-a126711d406e'

   (4) 僞文件系統名稱:proc, sysfs, devtmpfs, configfs

固定掛載點MOUNT_POINT:/mnt /media

  掛載點需要具備以下兩點

    1.掛載點事先存在,並且使用空目錄

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

mount常用命令選項

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

  -r: readonly,只讀掛載

  -w: read and write, 讀寫掛載

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

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

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

  -U UUID='UUID': 以UUID指定要掛載的設備

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

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

    async:異步模式,內存更改時,不會馬上寫入磁盤,以節省IO資源

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

    atime/noatime:包含目錄和文件

    diratime/nodiratime:目錄的訪問時間戳

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

    exec/noexec:是否支持將文件系統上運行應用程序

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

    suid/nosuid:不否支持suid和sgid權限

    remount:重新掛載

    ro:只讀

    rw:讀寫

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

    acl:啓用此文件系統上的acl功能


     注意:1、上述選項可多個同時使用,彼此之間使用逗號分隔。

       2、默認掛載選項:rw, dev, exec, auto, nouser, async


示例1:掛載/dev/sdb1到/mnt/sdb1目錄下面

wKiom1fCpEyCx08YAABNtNgQmvw618.png

示例2:取消/dev/sdb1的掛載

wKioL1fCpE2hkhinAABMpJZesoM798.png

示例3:重新掛載設備/dev/sdb1且爲只讀

wKioL1fCpaig1XAhAAAhl-6Ufm8550.png

示例4:掛載目錄具有suid權限的目錄(此操作過於危險,請謹慎使用)

當掛載具有suid的目錄後,假如目錄下面有某些系統命令在該目錄下面,使用這些命令,可以直接查看到或修改到系統的文件,所以需要我們謹慎操作此命令。

wKioL1fCpxDjGtcBAABwZX7K1f8985.png


查看內核追蹤到的已掛載的所有設備:

    cat /proc/mounts

wKioL1fCr06xTBajAAAaBCHIvqU276.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章