磁盤管理(一)磁盤分區表類型與文件系統

概述:本章介紹磁盤分區和文件系統,深度了解linux存儲數據所依賴到各個部分模塊。

設備文件

I/O Ports: I/O設備地址

一切皆文件:

Linux為所有的設備文件都提供了統一的操作函數接口,方法是使用數據結構struct file_operations。這個數據結構中包括許多操作函數的指針,如open()、close()、read()和write()等,但由于外設 的種類較多,操作方式各不相同。Struct file_operations結構體中的成員為一系列的接口函數,如用于讀/寫的read/write函數和用于控制的ioctl等。 打開一個文件就是調用這個文件file_operations中的open操作。不同類型的文件有不同的file_operations成員函數,如普通的磁盤數據文件, 接口函數完成磁盤數據塊讀寫操作;而對于各種設備文件,則最終調用各自驅動程序中的I/O函數進行具體設備的操作。這樣,應用程序根本不必考慮操作的是設 備還是普通文件,可一律當作文件處理,具有非常清晰統一的I/O接口。所以file_operations是文件層次的I/O接口。

設備類型:

    塊設備(block):隨機訪問,數據交換存取單位“塊”,磁盤

    字符設備(character):線性訪問,數據交換存取單位“字符”,鍵盤

設備號碼:

    主設備號: major number, 標識設備類型:區分設備類型;用于標明設備所需要的驅動程序;

    次設備號: minor number, 標識同一類型下的不同設備:區分同種類型下的不同的設備;是特定設備的訪問入口;

硬盤種類:

        機械硬盤

        固態硬盤

硬盤接口類型

并行:

     IDE(ata):并口 133MB/s

     SCSI(IDE時代服務器上使用):并口 Ultrascsi320,320MB/s;Ultrascsi640,640MB/s

并口:同一線纜可以接多塊設備

      IDE:兩個,主盤,從盤

      SCSI:

           寬帶16-1(必用一個)

           窄帶8-1(必用一個)

    

串口:同一線纜只可以接一個設備

    SATA: 6Gbps

    SAS: 6Gbps

    USB: 480MB/s

平均尋道時間:

rpm: rotations每分鐘轉速

     例如:5400rpm,7200rpm,10000rpm,scsi:15000rpm

lops:io per minute 每分鐘IO次數機械硬盤一般在100-200之間

硬盤存儲術語

head:磁頭  (早期最多可有256個)

track:磁道 (早期最多可有1024個)  =512*63

cylinder: 柱面(不同磁盤的相同磁道組成;并且分區是以柱面為)   柱面容量=track(磁道)63*head(磁頭)256*512bytes=8M

secotr: 扇區, 512bytes(早期有63個)

CHS尋址模式

1、CHS尋址模式將硬盤劃分為磁頭(Heads)、柱面(Cylinder)、扇區(Sector)。

 磁頭(Heads):每張磁片的正反兩面各有一個磁頭,一個磁頭對應一張磁片的一個面。因此,用第幾磁頭就可以表示數據在哪個磁面。

 柱面(Cylinder):所有磁片中半徑相同的同心磁道構成“柱面",意思是這一系列的磁道垂直疊在一起,就形成一個柱面的形狀。簡單地理解,柱面數=磁道數。

 扇區(Sector):將磁道劃分為若干個小的區段,就是扇區。雖然很小,但實際是一個扇子的形狀,故稱為扇區。每個扇區的容量為512字節。

2、知道了磁頭數、柱面數、扇區數,就可以很容易地確定數據保存在硬盤的哪個位置。也很容易確定硬盤的容量,其計算公式是:

硬盤容量=磁頭數×柱面數×扇區數×512字節

3、LARGE尋址模式把柱面數除以整數倍、磁頭數乘以整數倍而得到的邏輯磁頭/柱面/扇區參數進行尋址,所以表示的已不是硬盤中的物理位置,而是邏輯位置。LBA尋址模式是直接以扇區為單位進行尋址的,不再用磁頭/柱面/扇區三種單位來進行尋址。但為了保持與CHS模式的兼容,通過邏輯變換算法,可以轉換為磁頭/柱面/扇區三種參數來表示,但表示的也和LARGE尋址模式一樣,已不是硬盤中的物理位置,而是邏輯位置了。

LBA(Logical Block Address),中文名稱:邏輯區塊地址;LBA可以意指某個數據區塊的地址或是某個地址所指向的數據區塊。

CHS地址可用以下公式轉成LBA,

#lba=(#c*H+#h)*S+#s-1

其中,

#c、#h、#s分別是磁柱、磁頭、扇區的編號

#lba是邏輯區塊編號

H=heads per cylinder,每個磁柱的磁頭數

S=sectors per track,每磁道的扇區數

LBA可用以下公式對應到CHS:

#c=#lba/(S*H)

#h=(#lba/S)%H

#s=(#lba%S)+1

其中,

/ 是整數除法

% 是取整數除法中的余數

請注意,當今的磁盤使用ZBR(Zone Bit Recording, 等密度記錄)方式,實際的每軌扇區數得根據它是哪一軌。不過磁盤還是會提供這個參數來符合公式,內部再自動調整。

其它公式:

#lba/S=q 余 r

#s=1+r

q/H=#c 余 #h

Linux的設備管理是和文件系統緊密結合的,各種設備都以文件的形式存放在/dev目錄下,稱為設備文件。應用程序可以打開、關閉和讀寫這些設備文件,完成對設備的操作,就像操作普通的數據文件一樣。為了管理這些設備,系統為設備編了號,每個設備號又分為主設備號和次設備號。主設備號用來區分不同種類的設備,而次設備號用來區分同一類型的多個設備。對于常用設備,Linux有約定俗成的編號,如硬盤的主設備號是3。

設備文件:關聯至設備驅動程序,設備的訪問入口,進而能夠跟與之對應硬件設備進行通信

磁盤設備的設備文件命名: /dev/DEV_FILE

IDE: /dev/hd

SCSI, SATA, SAS, USB: /dev/sd[a-z]

不同設備: a-z

          /dev/sda, /dev/sdb, …

同一設備上的不同分區/dev/sd[a-z]#: 1,2, …

                     /dev/sda1, /dev/sda5

注意:CentOS6與7統統將硬盤設備文件標識為/dev/sd[a-z]#

創建設備文件命令:

mknod:創建塊或字符設備特殊文件

用法:

      mknod [OPTION]… NAME TYPE [MAJOR MINOR]

      mknod [選項]… 名稱 類型 [主設備號 次設備號]

選項:

      -m:設置設備文件權限位,類似于chmod,不似a=rw,umask

      -Z:設置SELinux安全環境默認類型

      –context[=CTX]:將對應名稱文件的SELinux 安全環境設置為CTX

類型:

      b:創建一個(有緩沖)塊設備特殊文件

      c, u:創建一個(無緩沖)字符設備特殊文件

      p:創建一個先進先出管道

注意:

當類型為"p"時可不指定主設備號和次設備號,否則它們是必須指定的。

如果主設備號和次設備號以"0x"或"0X"開頭,它們會被視作十六進制數來解析;如果以"0"開頭,則被視作八進制數;其余情況下被視作十進制數。

引用設備的方式:

               設備文件名

               卷標

               UUID

生成UUID

[root@localhost ~]# uuidgen

e3a6116a-87f9-485d-8348-5e89dd7999d0     

磁盤分區

 兩種分區方式: MBR, GPT

MBR: Master Boot Record(主引導記錄),使用32位表示扇區數, 分區不超過2T

如何分區:按柱面分區

0磁道0扇區:512bytes

            446bytes: boot loader:用于啟動硬盤的一些引導指令(即主引導程序,MBR)

            64bytes:磁盤分區表(DPT),每16bytes標識一個分區,一共只能有4個分區(4個主分區或 3主分區+1擴展(N個邏輯分區))

            2bytes: MBR區域的有效標識;55AA為有效;否則認為未分區無法使用

注意:

擴展分區(Extended)必須分區成若干個邏輯分區才能使用。擴展分區也存在類似MBR的EBR(擴展分區引導記錄)

主分區和擴展分區的標識:1-4

邏輯分區:5以上整數

一般一個數據塊(Block)=2^n個扇區

GPT分區

GPT:GUID patition table 支持128個分區,使用64位,支

持8Z(512Byte/block ) 64Z (4096Byte/block)

使用128位UUID 表示磁盤和分區 GPT分區表自動備份在頭

和尾兩份,并有CRC校驗位

UEFI (統一擴展固件接口)硬件支持GPT,使操作系統啟動

   EFI部分又可以分為4個區域: EFI信息區(GPT頭)、分區表、 GPT分區、備份區域

管理分區

列出塊設備

lsblk

創建分區使用:

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

gdisk 創建GPT分區 推薦使用此工具管理GPT分區

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

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

分區工具fdisk和gdisk

注意:因為可以進行分區所以慎用

      fdisk /dev/sd*

      gdisk /dev/sd* 類fdisk 的GPT分區工具

1、查看磁盤分區信息

   fdisk -l [-u] [device…]

示例:

[root@localhost ~]# fdisk -l /dev/sda

磁盤 /dev/sda:214.7 GB, 214748364800 字節,419430400 個扇區

Units = 扇區 of 1 * 512 = 512 bytes

扇區大小(邏輯/物理):512 字節 / 512 字節

I/O 大小(最小/最佳):512 字節 / 512 字節

磁盤標簽類型:dos

磁盤標識符:0x000af0bf

   設備   Boot      Start         End      Blocks   Id  System

/dev/sda1   *        2048      411647      204800   83  Linux

/dev/sda2          411648   210126847   104857600   83  Linux

/dev/sda3       210126848   218515455     4194304   82  Linux swap / Solaris

/dev/sda4       218515456   419430399   100457472    5  Extended

/dev/sda5       218517504   260460543    20971520   83  Linux

注意:

Boot列*號所在分區代表引導分區(操作系統所在)

Start與End(分區開始與結束):CentOS6為從那個柱面開始到那個柱面結束

                              CentOS7為從那個扇區開始到那個扇區結束 

Blocks:數據庫數量

Id(類型):正常分區用83(十六進制數字)表示;交換分區(有些場景可以理解為虛擬內存)用82表示;擴展分區用5表示

2、管理分區

fdisk [-uc] [-b sectorsize] [-C cyls] [-H heads] [-S sects] device

fdisk提供了一個交互式接口來管理分區,他有許多子命令,分別用于不同的管理功能;所有的操作均在內存中完成,沒有直接同步到磁盤;直到使用w命令保存至磁盤上

示例:

[root@localhost ~]# fdisk /dev/sdd

歡迎使用 fdisk (util-linux 2.23.2)。

更改將停留在內存中,直到您決定將更改寫入磁盤。

使用寫入命令前請三思。

Device does not contain a recognized partition table

使用磁盤標識符 0x51e40e4e 創建新的 DOS 磁盤標簽。

命令(輸入 m 獲取幫助):m

命令操作

    a 切換可引導標志

    b 編輯 bsd 磁盤

    c 切換 dos 兼容性標志

    d 刪除一個分區

    l 列出已知的分區類型(Id)

    m 打印此菜單

    n 添加新的分區

    o 創建一個新的空 DOS 分區表

    p 顯示分區表

    q 退出而不保存更改

    s 創建新的空動作

    t 改變分區的系統類型 id

    u 更改顯示/輸入單位驗證分區表

    w 寫入磁盤并退出

    x 額外功能 (僅限于專家)

命令(輸入 m 獲取幫助):l

 0  空             24  NEC DOS          81  Minix / 舊 Linu    bf  Solaris        

 1  FAT12           27  隱藏的 NTFS Win     82  Linux 交換 / So    c1  DRDOS/sec (FAT-

 2  XENIX root        39  Plan 9          83  Linux          c4  DRDOS/sec (FAT-

 3  XENIX usr        3c  PartitionMagic      84  OS/2 隱藏的 C:   c6  DRDOS/sec (FAT-

 4  FAT16 <32M        40  Venix 80286       85  Linux 擴展      c7  Syrinx         

 5  擴展            41  PPC PReP Boot      86  NTFS 卷集      da  非文件系統數據 

 6  FAT16           42  SFS             87  NTFS 卷集       db  CP/M / CTOS / .

 7  HPFS/NTFS/exFAT    4d  QNX4.x           88  Linux 純文本     de  Dell 工具      

 8  AIX            4e  QNX4.x 第2部分      8e  Linux LVM      df  BootIt         

 9  AIX 可啟動        4f  QNX4.x 第3部分     93  Amoeba         e1  DOS 訪問       

 a  OS/2 啟動管理器    50  OnTrack DM        94  Amoeba BBT      e3  DOS R/O        

 b  W95 FAT32        51  OnTrack DM6 Aux     9f  BSD/OS         e4  SpeedStor      

 c  W95 FAT32 (LBA)    52  CP/M            a0  IBM Thinkpad 休   eb  BeOS fs        

 e  W95 FAT16 (LBA)    53  OnTrack DM6 Aux     a5  FreeBSD        ee  GPT            

 f  W95 擴展 (LBA)     54  OnTrackDM6        a6  OpenBSD        ef  EFI (FAT-12/16/

 10  OPUS           55  EZ-Drive          a7  NeXTSTEP       f0  Linux/PA-RISC  

 11  隱藏的 FAT12      56  Golden Bow        a8  Darwin UFS      f1  SpeedStor      

 12  Compaq 診斷       5c  Priam Edisk       a9  NetBSD         f4  SpeedStor      

 14  隱藏的 FAT16 <3    61  SpeedStor        ab  Darwin 啟動      f2  DOS 次要       

 16  隱藏的 FAT16      63  GNU HURD or Sys    af  HFS / HFS+      fb  VMware VMFS    

 17  隱藏的 HPFS/NTF    64  Novell Netware     b7  BSDI fs        fc  VMware VMKCORE 

 18  AST 智能睡眠      65  Novell Netware     b8  BSDI swap       fd  Linux raid 自動

 1b  隱藏的 W95 FAT3    70  DiskSecure 多啟    bb  Boot Wizard 隱    fe  LANstep        

 1c  隱藏的 W95 FAT3    75  PC/IX           be  Solaris 啟動     ff  BBT            

 1e  隱藏的 W95 FAT1    80  舊 Minix 

注意:在已經分區并且已經掛載其中某個分區的磁盤設備上的創建的新分區,內核可能在創建完成后無法直接識別

同步分區表

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

 # cat /proc/partations

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

CentOS 5,7:partprobe [/dev/DEVICE]

CentOS 6,7:partx,kpartx

partx [-a|-d|-s|-u] [-t TYPE] [-n M:N] [-] disk

partx [-a|-d|-s|-u] [-t TYPE] partition [disk]

       -a:添加制定的分區或讀磁盤新增的分區

       -d:刪除制定或所有的分區

       -n:指定分區范圍(例如M:N輸入為2:-1表示最后兩個分區)

新增分區用

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

kpartx -a /dev/DEVICE -f: force

刪除分區用

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

centos6: –nr N-M

分區創建工具:parted,sfdisk;

parted命令

parted的操作都是實時生效的,小心使用

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

       parted /dev/sdb mklabel gpt|msdos

       parted /dev/sdb print

       parted /dev/sdb mkpart primary 1 200 (默認M)

       parted /dev/sdb rm 1

       parted -l

創建文件系統:

格式化:

        低級格式化(分區之前進行,低級格式化就是將磁盤內容重新清空,恢復出廠時的狀態,劃分出的柱面和磁道,再將磁道劃分為若干個扇區,每個扇區又劃分出標識部分ID、間隔區GAP和數據區DATA等。而且低級格式化只能針對一塊硬盤而不能支持單獨的某一個分區。每塊硬盤在出廠時,已由硬盤生產商進行低級格式化,因此通常使用者無需再進行低級格式化操作。注意的是低級格式化一種損耗性操作)

        高級格式化(分區之后對分區進行,高級格式化又稱邏輯格式化,它是指根據用戶選定的文件系統(如FAT12、FAT16、FAT32、NTFS、EXT2、EXT3等),在磁盤的特定區域寫入特定數據,以達到初始化磁盤或磁盤分區、清除原磁盤或磁盤分區中所有文件的一個操作。高級格式化包括對主引導記錄中分區表相應區域的重寫、根據用戶選定的文件系統,在分區中劃出一片用于存放文件分配表、目錄表等用于文件管理的磁盤空間,以便用戶使用該分區管理文件。即創建文件系統并清除所有數據以實現初始化)

元數據區、數據區

元數據區:

    文件元數據:inode(index node)

        大小、權限、屬主屬組、時間戳、數據塊指針  (但是不包括文件名,文件名保存在目錄數據塊中)

        注意:最大單個文件大小由inode(數據塊指針)多少決定

    特殊文件:

            鏈接文件:存儲數據指針的空間當中存儲的是真實文件的訪問路徑(本身不占據磁盤塊);

            設備文件:存儲數據指針的空間當中存儲的是設備號(major,minor)(本身不占據磁盤塊);

文件系統

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

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

文件系統類型

Linux文件系統: : ext2(Extended file system), ext3,

ext4, xfs(企業級64位SGI) , btrfs(Oracle) , reiserfs(反刪除功能很好,但是開發受阻), jfs(

AIX) , swap

光盤: iso9660

Windows: fat32, ntfs

Unix: FFS(fast快速文件系統) , UFS(unix) , JFS2(日志文件系統)

網絡文件系統: NFS, CIFS

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

   內核級分布式文件系統:ceph

用戶空間分布式文件系統: moosefs, mogilefs, glusterfs,Lustre

   偽文件系統:proc,sysyfs,tmpfs,hugepagefs

   交換文件系統:swap

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

文件系統分類

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

  日志型文件系統: ext3, ext4, xfs, …

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

文件系統的組成部分:

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

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

Linux的虛擬文件系統: VFS(用戶與文件系統之間的接口)

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

創建文件系統

mkfs命令:

  (1) # mkfs.FS_TYPE /dev/DEVICE

              ext4

              xfs

              btrfs

              vfat

              mkfs.vfat device

              mkfs -t ext2 = mkfs.ext2

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

    -L 'LABEL': 設定卷標

創建ext文件系統

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

   mke2fs [OPTION] device

          -t {ext2|ext3|ext4}:指明要創建的文件系統類型;

              mkfs.ext4 = mkfs -t ext4 = mke2fs -t ext4

          -b {1024|2048|4096}:指明文件系統的塊大?。?/p>

          -L 'LABEL' 創建文件系統并設定卷標

          -j: 相當于 -t ext3

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

          -i #: 指明inode與字節的比率;即每多少字節創建一個Indode;此大小不應該小于block的大小

          -N #:直接指明要為此文件系統創建的inode的數量

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

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

          -O FEATURE[,…]:啟用指定特性創建目標文件系統

          -O ^FEATURE:關閉指定目標文件系統特性

 

對已創建文件系統管理卷標 

  e2label命令:卷標的查看與設定

        查看:e2lable device

        設定:e2label device LABEL

dumpe2fs:現實ext系列文件系統的屬性信息

    dumpe2fs [-h] device

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

tune2fs:查看或重新設定ext系列文件系統可調整參數的值(不用重新格式化)

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

            -L 'LABEL':修改卷標

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

            -j: 將ext2升級為ext3

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

            -o[^]: 調整文件系統的默認掛載選項(mount_options),例如:–o ^acl關閉訪問控制列表

            -U UUID: 修改UUID號

注意:塊大小創建后不可修改

因進程意外終止或系統崩潰等原因導致操作非正常終止時,可能會造成文件損壞;此時,應該檢測并修復文件系統;建議,離線進行(非掛載狀態,無人操作);

文件系統檢測和修復

常發生于死機或者非正常關機之后

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

fsck: 文件系統檢測修復

        fsck.FS_TYPE

        fsck -t FS_TYPE 指明文件系統類型;

            fsck.ext4 = fsck -t ext4

        -a: 無須交互而自動修復所有錯誤;(不推薦使用)

        -r: 交互式修復錯誤

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

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

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

        -f:即使文件系統處于clean狀態,也要強制檢測修復

文件系統標簽

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

blkid:塊設備屬性信息查看

  blkid [OPTION]… [DEVICE]

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

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

 

findfs :查找分區

  findfs [options] LABEL=<label>

  findfs [options] UUID=<uuid>

    

 

文件系統要想使用必須要掛載

掛載mount

  在linux操作系統中,掛載是一個非常重要的功能,使用非常頻繁。它指將一個設備(通常是存儲設備)掛接到一個已存在的目錄上。(這個目錄可以不為空,但掛載后這個目錄下以前的內容將不可用。)需要理解的是,linux操作系統將所有的設備都看作文件,它將整個計算機的資源都整合成一個大的文件目錄。

  我們要訪問存儲設備中的文件,必須將文件所在的分區掛載到一個已存在的目錄上,然后通過訪問這個目錄來訪問存儲設備。

掛載:將額外文件系統與根文件系統某現存的目錄建立起關聯

關系,進而使得此目錄做為其它文件訪問入口的行為

卸載:為解除此關聯關系的過程

把設備關聯掛載點: mount Point

    mount

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

    umount

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

掛載點目錄一般為空

用mount命令掛載文件系統

掛載方法: mount DEVICE MOUNT_POINT

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

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

device:指明要掛載的設備;

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

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

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

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

dir:掛載點

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

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

mount常用命令選項

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

-r: readonly,只讀掛載

-w: read and write, 讀寫掛載

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

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

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

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

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

目錄也可以掛在至另一個目錄上作為其臨時訪問入口;

    mount –bind 源目錄 目標目錄

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

            async:異步模式

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

            atime/noatime:目錄或文件在被訪問時是否更新其訪問時間戳

            diratime/nodiratime:目錄在被訪問時是否更新其訪問時間戳

            auto/noauto:是否支持自動掛載,是否支持-a選項(一般寫在/etc/fstab中)

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

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

            suid/nosuid:是否支持程序文件上的suid和sgid特殊權限生效

            remount:重新掛載;

            ro:只讀

            rw: 讀寫

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

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

                 #mount -o acl device dir

                 #tune2fs -o acl device

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

         

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

    #mount

    #cat /etc/mtab

    #cat /proc/mounts   

卸載命令

查看掛載情況:

  #findmnt MOUNT_POINT

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

  #lsof MOUNT_POINT

  #fuser -v MOUNT_POINT

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

  # fuser -km MOUNT_POINT

卸載:

  # umount DEVICE

  # umount MOUNT_POINT

設定除根文件系統以外的其它文件系統能夠開機時自動掛載:/etc/fstab文件 

文件掛載配置文件

/etc/fstab 每行定義一個要掛載的文件系統;

         第一列字段:要掛載的設備或偽文件系統(設備文件或LABEL=""卷標或UUID="")

                       偽文件系統:如sysfs,proc,tmpfs等  

         第二列字段:掛載點

                       swap類型的設備的掛載點為swap;

         第三列字段:文件系統類型

         第四列字段:掛載選項

                       defaults:使用默認掛在選項;

                       如果要同時指明多個掛載選項,彼此間以逗號分隔;

         第五列字段:轉儲頻率(備份)

                       0:不做備份

                       1:每天轉儲

                       2:每隔一天轉儲 

         第六列字段:自檢次序

                       0:不自檢

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

                       2:次級自檢

自動掛載定義在/etc/fstab中的所有支持自動掛載的文件系統設備

#mount -a 

swap文件系統:

    Linux上的交換分區必須使用獨立的文件系統;且文件系統的System ID必須為82;

    創建swap設備:mkswap命令

    mkswap [OPTIONS] device

              -L LABEL:指明卷標

              -f:強制創建

windows無法識別Linux的文件系統;因此,存儲設備需要兩種系統之間交叉使用時,應該使用windows和Linux同時支持的文件系統;fat32(vfat);

處理交換文件和分區

交換分區是系統RAM的補充

基本設置包括:

        創建交換分區或者文件

        使用mkswap寫入特殊簽名

        在/etc/fstab文件中添加適當的條目

        使用swapon -a 激活交換空間

掛載交換分區

啟用: swapon

       swapon [OPTION]… [DEVICE]

                -a:激活所有的交換分區(定義在/etc/fstab文件中的所有swap設備);

                -p PRIORITY:指定優先級

                             /etc/fstab:pri=value

禁用: swapoff [OPTION]… [DEVICE]

SWAP的優先級

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

如果用戶沒有指定,那么核心會自動給swap指定一個優

先級,這個優先級從-1開始,每加入一個新的沒有用戶

指定優先級的swap,會給這個優先級減一。

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

缺省指定的優先級(是負數)。

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

移動介質

掛載意味著使外來的文件系統看起來如同是主目錄樹的一部分

訪問前、介質必須被掛載

摘除時,介質必須被卸載

按照默認設置,非根用戶只能掛載某些設備(光盤、 DVD、軟盤、 USB等等)

掛載點通常在/media 或/mnt下

使用光盤

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

否則就必須被手工掛載

         mount /dev/cdrom /mnt/

eject命令卸載或彈出磁盤

          #eject

          #eject -t 彈入

創建ISO文件

        cp /dev/cdrom /root/centos7.iso

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

刻錄光盤

        wodim –v –eject centos.iso

掛載本地的回環設備:

       回環設備:一般為使用鏡像文件(鏡像文件中也有文件系統)虛擬塊設備存在于實際的另一個文件系統中

       #mount -o loop /PATH/TO/SOME_LOOP_FILE MOUNT_POINT

掛載USB介質

被內核探測為SCSI設備

  /dev/sdaX、 /dev/sdbX、或類似的設備文件

   在圖形環境中自動掛載

  圖標在[計算機]窗口中創建

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

手動掛載

  mount /dev/sdb1 /mnt

常見工具

內存空間使用狀態:

  free [OPTION]

    -m: 以MB為單位

    -g: 以GB為單位

    -h:human-readable;以人類易讀的單位顯示

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

  df [OPTION]… [FILE]…

    -H 以1000為單位

    -T 文件系統類型

    -h: human-readable;以人類易讀的單位顯示

    -i: inodes instead of blocks;顯示inode的使用狀態而非blocks

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

    -:僅顯示本地文件的相關信息(不包括網絡中的);

查看某目錄總體空間占用狀態:

  du [OPTION]… DIR

    -h: human-readable;以人類易讀的單位顯示

    -s: summary;共計

工具dd

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 指定塊大?。仁鞘莍bs也是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

有一個大與2K的二進制文件fileA。 現在想從第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將無法掛載,創建和拷貝操作無法執行。

得到最恰當的block size

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

of=/root/1Gb.file

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

of=/root/1Gb.file

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

of=/root/1Gb.file

dd if=/dev/zero bs=8192 count=125000

of=/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錯誤。當這種情況影響到硬盤的第一個扇區時,可能導致硬盤報廢。上邊的命令有可能使這些數據起死回生。且這個過程是安全,高效的。

du -s 當前目錄下所有文件大小和

du -sh

du -sh /

du -sh /*

1、創建一個2G的文件系統,塊大小為2048byte, 預留1%可用空間,文件系統ext4,卷標為TEST,要求此分區開機后自

動掛載至/testdir目錄,且默認有acl掛載選項

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

(1) 列出當前系統識別到的所有磁盤設備

(2) 如磁盤數量為1,則顯示其空間使用信息

否則,則顯示最后一個磁盤上的空間使用信息

二、總結練習:

1、分區(mbr,gpt)區別和結構

MBR,全稱為Master Boot Record,即硬盤的主引導記錄。

   硬盤的0柱面、0磁頭、1扇區稱為主引導扇區(也叫主引導記錄MBR)。它由三個部分組成,主引導程序、硬盤分區表DPT(Disk Partition table)和分區有效標志。在總共512字節的主引導扇區里主引導程序(boot loader)占446個字節,第二部分是Partition table區(分區表),即DPT,占64個字節,硬盤中分區有多少以及每一分區的大小都記在其中。第三部分是magic number,占2個字節,固定為0xAA55或0x55AA,這取決于處理器類型,如果是小端模式處理器(如Intel系列),則該值為0xAA55;如果是大端模式處理器(如Motorola6800),則該值為0x55AA。

wKiom1fG0Iaxs2-GAAA3STtFdaY381.png

注意

MBR是不屬于任何一個操作系統,也不能用操作系統提供的磁盤操作命令來讀取它,但可以通過命令來修改和重寫

MBR組成

   一個扇區的硬盤主引導記錄MBR由4個部分組成。

主引導程序(偏移地址0000H–0088H):它負責從活動分區中裝載,并運行系統引導程序。

出錯信息數據區:偏移地址0089H–00E1H為出錯信息,00E2H–01BDH全為0字節。

分區表(DPT,Disk Partition Table)含4個分區項:偏移地址01BEH–01FDH,每個分區表項長16個字節,共64字節為分區項1、分區項2、分區項3、分區項4。

結束標志字:偏移地址01FE–01FF的2個字節值為結束標志0xAA55或0x55AA,稱為“魔數”(magic number)。如果該標志錯誤系統就不能啟動。

MBR使用磁盤的最開始的512Byte,結構圖如下??梢钥吹街挥兄虚g的64Byte是用來描述分區表的,每16Byte描述一個分區,所以最多只能同時劃分4個主分區。

wKioL1fG0X-SOTURAAAfE_JuHB0722.png

具體含義如下:

(1)0x00~0x1BD:446個字節,包含一段指令,用以通知計算機如何訪問分區表并定位操作系統的位置

這部分的代碼會因為操作系統不同而不同,利用引導代碼可以實現多重系統引導。多系統引導有兩種方法可以實現:一種方法是用操作系統在引導分區中設置一段代碼,先加載進入用戶選擇系統的界面,允許用戶選擇要進入的系統,再進入指定的系統;第二種方法是改變MBR中的引導代碼,該代碼直接呈現給用戶一個選擇系統的界面。

(2)0x1BE~0x1FD:64個字節,4個分區表項,每個表項占用16個字節,描述一個分區,最多可以描述4個分區(這就是為什么MBR分區體系只能分成4個區【我們平時看到的分區一般可以從26個字母中選取任意多個當做分區標識(多于4個),這是因為那些分區是邏輯分區,這里的4個分區指的是主分區和擴展分區的數目,而邏輯分區是在擴展分區中劃分出來的,也叫做二級、三級擴展分區?!浚?/p>

分區表項并沒有順序要求,即不要求第一個分區表項在第二個分區表項前。

分區表也不要求從第一個分區表項開始

(3)0x1FE~0x1FF:2個字節,有效結束標志0xAA55或0x55AA。如果沒有這個標志,操作系統會認為磁盤沒有初始化,無法正確加載磁盤的分區。

  而描述硬盤分區結構信息的這16Byte是如下這樣的結構。可以發現只有最后4Byte是用來描述分區總的扇區數的,4Byte是32位,也就是分區最大只能是2^32*512Byte,大概是2.2TB。

磁盤管理(一)磁盤分區表類型與文件系統

分區表參數含義(字節)

0 活動(80)或非活動分區(00)

1 2 3 起始的磁頭 01 柱面 01 扇區00值

4 分區類型符 NTFS(07)FAT32(0B)擴展(0F)

5 6 7 結束的磁頭 FE 柱面 FF 扇區FF值

8 9 A B 本分區之前已用扇區數

C D E F 本分區大小

虛擬MBR

即 EBR (extent boot record)擴展引導記錄,其記錄表項 與MBR相同 ,用于管理擴展分區上的邏輯驅動器。

GUID磁碟分割表(GUID Partition Table,縮寫:GPT)

  其含義為“全局唯一標識磁盤分區表”,是一個實體硬盤的分區表的結構布局的標準。它是可擴展固件接口(EFI)標準(被Intel用于替代個人計算機的BIOS)的一部分,被用于替代BIOS系統中的一32bits來存儲邏輯塊地址和大小信息的主開機紀錄(MBR)分區表。

1、支持2TB以上的大硬盤。

2、每個磁盤的分區個數幾乎沒有限制?!皫缀酢笔且驗閃indows系統最多只允許每個劃分128個分區。不過也完全夠用了。

3、分區大小幾乎沒有限制。“幾乎”。因為它用64位的整數表示扇區號,即2^64=18,446,744,073,709,551,616??鋸堃稽c說,一個64位整數能代表的分區大小已經是個“天文數字”了,若干年內你都無法見到這樣大小的硬盤,更不用說分區了。

4、分區表自帶備份。在磁盤的首尾部分分別保存了一份相同的分區表。其中一份被破壞后,可以通過另一份恢復。

5、每個分區可以有一個名稱(不同于卷標)。

磁盤管理(一)磁盤分區表類型與文件系統磁盤管理(一)磁盤分區表類型與文件系統

  邏輯塊(LBA)大小是512Byte。出于兼容性考慮,LBA 0(即硬盤的第一個扇區)仍然用作MBR,之后LBA 1是分區表頭。LBA 2-33都用來描述分區表項,每個LBA可描述4個分區,即每個分區使用128Byte來描述。另外,GPT分區將在磁盤最后的33個扇區作為主分區表的備份,稱為備份分區表。

  GPT 為了兼容 MBR,LBA 0 依舊保留了MBR的結構。在GPT工作時,會優先讀取 GPT (LBA1) 內容。如果沒有 GPT 內容,則認為這是一塊MBR磁盤。再從LBA 0 讀取MBR。  在硬盤末尾,GPT 備份了一份,這樣當GPT出錯時,可以快速的從硬盤末尾恢復。LBA -1 (負1) 表示倒數第一塊 LBA。  從LBA 2 到 LBA 33 ,一共預留了 128 個分區表空間。 GPT 支持在一塊硬盤上創建 128 個分區。所以每一個分區可以使用 128 bytes 的空間。

磁盤管理(一)磁盤分區表類型與文件系統

而每個分區表項是如下這樣的結構,可以看到它使用8Byte描述分區起始位置和結束位置,那么就是(2^64-1)*512Byte=9.4ZB(9.4×10^21字節)。

磁盤管理(一)磁盤分區表類型與文件系統

GPT磁盤與MBR磁盤      

GPT(Globally Unique Identifier Partition Table Format)一種由基于 Itanium 計算機中的可擴展固件接口 (EFI) 使用的磁盤分區架構。與主啟動記錄 (MBR) 分區方法相比,GPT 具有更多的優點,因為它允許每個磁盤有多達 128 個分區,支持高達 18 千兆兆字節的卷大小,允許將主磁盤分區表和備份磁盤分區表用于冗余,還支持唯一的磁盤和分區 ID (GUID)。      與支持最大卷為 2 TB (terabytes) 并且與每個磁盤最多有 4 個主分區(或 3 個主分區,1 個擴展分區和無限制的邏輯驅動器)的主啟動記錄 (MBR) 磁盤分區的樣式相比,GUID 分區表 (GPT) 磁盤分區樣式支持最大卷為 18 EB (exabytes) 并且每磁盤最多有 128 個分區。與 MBR 分區的磁盤不同,至關重要的平臺操作數據位于分區,而不是位于非分區或隱藏扇區。另外,GPT 分區磁盤有多余的主要及備份分區表來提高分區數

2、作業:分區(mbr,gpt),創建文件系統(ext系列,xfs等),mount掛載各種選項

MBR分區:

磁盤管理(一)磁盤分區表類型與文件系統

磁盤管理(一)磁盤分區表類型與文件系統

磁盤管理(一)磁盤分區表類型與文件系統

磁盤管理(一)磁盤分區表類型與文件系統

磁盤管理(一)磁盤分區表類型與文件系統

磁盤管理(一)磁盤分區表類型與文件系統

GPT分區:

磁盤管理(一)磁盤分區表類型與文件系統

磁盤管理(一)磁盤分區表類型與文件系統

注意:文件系統是針對分區來使用的,如如下圖操作,則是將整個磁盤當成一個分區,格式化創建文件系統

創建ext系列文件系統

磁盤管理(一)磁盤分區表類型與文件系統

創建ext系列文件系統工具還有以下工具

磁盤管理(一)磁盤分區表類型與文件系統

mke2fs

創建xfs文件系統

磁盤管理(一)磁盤分區表類型與文件系統

磁盤管理(一)磁盤分區表類型與文件系統

注意:

對已經分區的硬盤新添加或刪除分區,需要執行以下命令,使內核能夠識別硬盤變動情況;而非分區過的硬盤不需要

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

CentOS 5,7:partprobe [/dev/DEVICE]

CentOS 6,7:partx,kpartx

partx [-a|-d|-s|-u] [-t TYPE] [-n M:N] [-] disk

partx [-a|-d|-s|-u] [-t TYPE] partition [disk]

       -a:添加制定的分區或讀磁盤新增的分區

       -d:刪除制定或所有的分區

       -n:指定分區范圍(例如M:N輸入為2:-1表示最后兩個分區)

新增分區用

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

kpartx -a /dev/DEVICE -f: force

刪除分區用

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

centos6: –nr N-M

例如

在已經分過區的磁盤上添加新分區

磁盤管理(一)磁盤分區表類型與文件系統

磁盤管理(一)磁盤分區表類型與文件系統

磁盤管理(一)磁盤分區表類型與文件系統

磁盤管理(一)磁盤分區表類型與文件系統

在已經分過區的磁盤上刪除分區

磁盤管理(一)磁盤分區表類型與文件系統

磁盤管理(一)磁盤分區表類型與文件系統磁盤管理(一)磁盤分區表類型與文件系統

mount掛載各種選項

分區掛載

磁盤管理(一)磁盤分區表類型與文件系統

光盤掛載

磁盤管理(一)磁盤分區表類型與文件系統

掛載USB

#mount /dev/sdf /mnt/usb

掛載回環設備

#mount -o loop /PATH/TO/SOME_LOOP_FILE MOUNT_POINT

掛載swap

磁盤管理(一)磁盤分區表類型與文件系統

磁盤管理(一)磁盤分區表類型與文件系統

磁盤管理(一)磁盤分區表類型與文件系統

磁盤管理(一)磁盤分區表類型與文件系統

磁盤管理(一)磁盤分區表類型與文件系統

掛載目錄

mount –bind 源目錄 目標目錄

開機自動掛載

編輯/etc/fstab文件

磁盤管理(一)磁盤分區表類型與文件系統

自動掛載定義在/etc/fstab中的所有支持自動掛載的文件系統設備

#mount -a 

激活所有的交換分區(定義在/etc/fstab文件中的所有swap設備);

#swapon -a

原創文章,作者:NameLess,如若轉載,請注明出處:http://www.www58058.com/42586

(3)
NameLessNameLess
上一篇 2016-08-31
下一篇 2016-09-01

相關推薦

  • 馬哥教育網絡班22期+第7周課程練習

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

    Linux干貨 2016-09-26
  • 第二周作業

    一、文件管理類命令     1、cp:復制文件        單文件復制cp source dest,如果dest存在且dest不是目錄,則覆蓋目標文件。如果dest不存在,則自行創建dest文件;如果source是目錄,則cp命令不會執行。如果source是鏈接文件,則復制的是鏈接文件指向的文件內…

    Linux干貨 2016-12-11
  • N22-第三周作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 # who|cut -d' ' -f1|sort|uniq # root 2、取出最后登錄到當前系統的用戶的相關信息。 # last|head -n 1 # …

    Linux干貨 2016-08-29
  • 第七周:文件系統、raid、lvm和shell腳本練習

    1、創建一個10G分區,并格式為ext4文件系統;    (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl; [root@wlm ~]# fdisk /dev/sdb    #將/dev/sdb進行分區操作 D…

    Linux干貨 2016-11-07
  • ldirectord 結合ipvsadm 配置nat,dr模型

    ldirectord 結合ipvsadm 配置nat,dr模型  一、nat模型 1、 drector # wget ftp://172.16.0.1/pub/Sources/7.x86_64/crmsh/ldirectord-3.9.6-0rc1.1.1.x86_64.rpm # yum -y install nginx (同時用于做為sorry…

    Linux干貨 2014-01-03
  • Linux終端類型

    Linux終端類型 關鍵字:linux終端,串行終端ttySn;偽終端pty;控制終端tty;控制臺終端console 要想與Linux打交道,就必須學會使用Linux終端。所謂Linux終端,其實也就是一種控制臺,一種字符設備,通常用tty標識,它是用戶和Linux內核交互的平臺,用戶能在平臺上通過各種指令操作Linux。終端的特殊設備文件一般分為以下幾種…

    Linux干貨 2016-10-19
欧美性久久久久