Linux 磁盤管理 基礎篇--創建基本文件分區

1 概述

本文通過對講解了磁盤的基本概念,分區,創建文件系統,掛載,卸載等步驟進行講解。使得用戶能夠創建基本的磁盤並掛載使用空間。

2 磁盤基本概念

2.1 磁盤空間

每個扇區大小是512byte,這是磁盤的最小單位

每一個磁道上有多少個扇區就是扇區數 sectors

每一圈叫做磁道(track),最外面的叫做0磁道

依次往裏增加,最裏面的磁道數最大

每個盤有兩個面,都有兩個磁頭(head)讀取數據

相同的磁道組成的叫做柱面(cylinder),同樣最外面叫0柱面,最裏面柱面數最大

因此,

每個盤面的存儲空間:512*sectors*tracks

每個柱面的空間:512*sectors*heads

每個硬盤的空間是:512*sectors*tracks*heads

扇區數是由6bit來決定,所以每個磁道最大有2^6就64個扇區

磁道的數量是由10bit來決定磁道的數量,所以磁道最多是2^10=1024個

盤面的數量是由8bit決定的,所以每個硬盤最大有2^8=256個磁頭

所以早期每個柱面的大小爲 512byte*64*256/1024/1024=8M.

CentOS6或者之前的版本默認柱面是劃分分區的基本單位是8M,centOS7默認用扇區爲單位分區,512byte。centOS7要顯示以柱面爲單位,就加-u=cylinder,如下語句

fdisk -l -u=cylinder /dev/sda

但是,早期每個磁盤的最大空間就是1024*8M/1024=8G.現在的磁盤爲了解決這個問題,就採用了區位記錄磁盤扇區結構(ZBRzoned bit recording)來定義磁盤的空間,磁盤大小因此得到了擴展。

1240

扇區圖片

2.2 磁盤尋址方式

分爲CHS 和 LBA 兩種

CHS

採用24bit位尋址

其中前10位表示cylinder,中間8位表示head,後面6位表示sector。

最大尋址空間8GB

LBA(logical block addressing)

LBA是一個整數,通過轉換成CHS格式完成磁盤具體尋址

LBA採用48個bit位尋址

最大尋址空間128PB

由於CHS尋址方式的尋址空間在大概8GB以內,所以在磁盤容量小於大概8GB時,可以使用CHS尋址方式或是LBA尋址方式;在磁盤容量大於大概8GB時,則只能使用LBA尋址方式

2.3 分區的概念

2.3.1 分區的原因

優化I/O性能

實現磁盤空間配額限制

提高修復速度

隔離系統和程序

安裝多個OS

採用不同文件系統


2.3.2 使用分區空間


設備識別

設備分區

創建文件系統

標記文件系統

在/etc/fstab文件中創建條目

掛載新的文件系統


2.3.3 管理分區

兩種分區方式:MBR,GPT

分區相當於是把一塊大硬盤分成幾個小房間。MBR是比較舊的分區方式,只能分區較小的空間已經分區的數量也會比較少,GPT則是克服了MBR的缺點。

MBR和GPT引導系統啓動的方式不一樣

1240

BIOS 和 UEFI 引導系統啓動流程

BIOS+MBR引導計算機進行啓動,BIOS寫入到ROM裏面,當計算機啓動時,BIOS就會去讀取MBR分區。通過BIOS配合MBR引導啓動分區

但是BIOS並跟GPT搭配。如果一定要用,可以通過 BIOS+MBRsda 系統盤,引導系統啓動+GPT(其他盤)分區的方式來進行分區。

默認情況下 UEFI+GPT進行系統的啓動


2.3.3.1 MBR分區概念

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

如何分區:按柱面

0磁道0扇區:512bytes

446bytes: boot loader

64bytes:分區表

16bytes: 標識一個分區

2bytes: 55AA

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

1240

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個字節值爲結束標誌55AA


2.3.3.2 GPT分區

GPT:GUID(Globals Unique Identifiers)partition table 支持128個分區,使用64位,支持8Z(512Byte/block )64Z (4096Byte/block)

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

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

1240

GPT分區結構

GPT的第一個0扇區是保護MBR,一樣是512byte,但是這個MBR不是用來啓動引導盤的。只是保護的目的,因爲傳統的操作系統都是支持MBR,並不支持GPT。保護MBR是當舊的電腦系統系統不識別GPT分區的時候,即認不出GPT格式的硬盤有數據的時候,會識別出該硬盤上有個MBR分區,最起碼是不會讓管理者誤認爲沒有操作系統或者分區,直接對該硬盤進行格式化。

GPT格式做的可以分128個分區。GPT分區表有自動備份的功能,支持更大的分區

2.3.4 格式化分區

給硬盤分區後,還要講對應的硬盤進行格式化,指定文件系統類型,是指定了對應分區上文件管理的方式,相當於有軟件來管理這個文件了。可以理解爲所謂的文件是由文件系統產生,沒有文件系統,就沒有了文件的概念。

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

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

查前支持的文件系統:

cat /proc/filesystems

查看當前系統支持的文件系統,可以進入fs目錄下查看,語句如下

cd /lib/modules/`uname -r`/kernel/fs

文件系統類型主要有以下幾種

Linux文件系統:ext2(Extended file system), ext3, ext4, xfs(SGI), btrfs(Oracle), reiserfs, jfs(AIX), swap

光盤:iso9660

Windows:FAT32, exFAT,NTFS

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

網絡文件系統:NFS, CIFS

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

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

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


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

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

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

文件系統的組成部分:

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

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

Linux的虛擬文件系統:VFS


當然,在文件系統中也是運行沒有文件系統的硬盤存在。

如果沒有分區,沒有文件系統,叫RAW,裸文件系統

如果沒有文件系統,要讀數據,可以用hexdump–C –n 512 /dev/sdb1這樣來讀取。

沒有文件系統的話,相當於把數據之間放在磁盤上了,讀取速度回比較快,如oracle數據庫就會把數據放在裸文件系統裏。


3 創建分區

以下三個工具可以創建分區。

fdisk創建MBR分區,

gdisk創建GPT分區

parted高級分區操作


3.1 parted分區

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

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

parted /dev/sdb mklabel gpt|msdos  //給整個硬盤打標籤,指定接下來硬盤要分區的類型
parted /dev/sdb print  //顯示硬盤的分區信息
parted /dev/sdb mkpart primary 1 200 (默認M)//開始分區,並指定大小,
                                                  //從第1M開始,到第200M結束
parted /dev/sdb rm 1  //數字1,移除掉對應的分區
parted -l  //字母l,顯示分區內容

注意

parted /dev/sdb mklabel gpt

如果用parted指定了硬盤lab爲gpt分區,則用fdisk命令也可以創建出gpt格式的分區,但是不建議這麼用

parted /dev/sdc mklabel msdos

如果用parted指定了硬盤lab爲mbr分區,則用gdisk分區的時候,會提示將MBR轉換爲GPT分區,這個和指定成GPT不一樣。

3.2 fdisk分區

3.2.1 創建分區

gfisk /dev/sdb 類fdisk 的GPT分區工具,這裏就僅介紹fdisk

fdisk -l [-u] [device...] 查看分區

fdisk /dev/sdb 管理分區

子命令:

p 分區列表

t 更改分區類型,centOS 6和centOS 7 相同類型的code不一樣。

n 創建新分區

d 刪除分區

v 校驗分區

u 轉換單位

w 保存並退出

q 不保存並退出


當分區後,新的分區不會馬上同步,需要用partprobe 或者 partx進行同步,原理是通知內核重新讀取硬盤分區表,重新設置內存中的內核分區表版本

partprobe- 用於centOS5和centOS7上

partx -   用於centOS6上

同步新增加的分區,命令

partx –a /dev/sda //表示通過新增加硬盤的分區表。如果盤裏面已經同步的分區,則表示該分區忙碌。

如果是同步刪除的分區,用命令 

 partx -d --nr 6-8 /dev/sda//則要指定刪除分區的那個具體數字。

命令lsblk可以列出塊設備

查看內核是否已經識別新的分區,命令如下

cat /proc/partitions

3.2.2刪除分區

常規辦法:通過fdisk /dev/sdb 進入,輸入 d,然後輸入對應的分區號進行刪除。即可


注意,刪除分區後,表的結構還是存在,所以可以通過清理0扇區上的512個字節,或者單純清空掉55(第0x015E位)和aa(0x015F位)這兩個分區位也可以達到刪掉分區的效果。

dd if=/dev/zero of=/dev/sdb bs=1 count=2 skip=510 seek=510

以上語句表示跳過510個字節,二進制表從第0位開始排序,跳過510位,實際是跳過第0-0x015D(509)這510個字節。seek表示從第510個字節(第0x015E位)開始.

以上這條語句,如果是MBR分區,則確實是已經清空掉分區表的分區信息,雖然通過lsblk還是可以看到原來的舊分區,但是通過partx同步信息後就同步了。通過fdsik -l /dev/sdb裏面也看不到信息了。

這個也說明,分區表在系統上有兩份,一份是在內存上,一份在磁盤上。

但是GPT特殊,雖然清空510和511位後,通過partprobe同步分區表信息,lsblk看不到舊的分區,但是通過gdisk -l /dev/sdb可以看到原來就的分區表的信息,這個可能是由於GPT分區信息有備份導致,所以gdt分區不建議這麼清空。

這裏做個小實驗,把系統當前正在使用的系統盤/dev/sda的的0扇區 做個備份, 然後清空這個0扇區,最後在通過備份的512字節的0扇區進行恢復。當然了,這個備份最好放到其他機器上,因爲一旦重啓被清空0扇區的機器,則該機器也啓動不了,需要通過其他機器拷貝該機器舊的分區表後才能恢復。當然生產上不能這麼操作。

生產上,如果要恢復mbr,可以將被破壞的硬盤拆到其他有mbr備份信息的機器上,然後再新的機器上通過dd命令把mbr信息恢復到被破壞的硬盤上,恢復後再把硬盤拆會原來機器。這個是單塊硬盤才能這麼做,如果是raid系統,就不能這麼恢復了。

生產上,如果該機器很重要,除了備份數據,建議也備份一下mbr

dd if=/dev/sda of=sdambr  bs=1 count=512


4  創建文件系統

創建文件系統,就是要將分好的分區進行格式化,指定對應的文件系統

4.1 mkfs命令

(1) mkfs.FS_TYPE /dev/DEVICE ,其中FS_TYPE可以指定爲ext3,ext4,xfs,vfat等

(2) mkfs -t  FS_TYPE  /dev/DEVICE

(3) mkfs -L  'LABEL'  /dev/DEVICE: 設定卷標

4.2 mke2fs命令

mke2fs:ext系列文件系統專用管理工具,專門用來格式化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:關閉指定特性

4.3 文件系統標籤

指向設備的另一種方法

與設備無關

blkid:塊設備屬性信息查看

blkid[OPTION]... [DEVICE]

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

blkid 默認只顯示塊設備文件,如果非塊設備,如通過dd創建,然後在格式化成ext4的普通文件,需要跟着文件名纔會顯示

dd if=/dev/zero of=tt bs=1M count=5
mkfs.ext4 tt
blkid  //顯示不出tt文件
blkid tt

如果硬盤不重新格式化,則UUID不會變,且是唯一,因爲磁盤的命名或者標籤可能會改變,所以,掛載建議用設備的UUID進行掛載

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

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

e2label DEVICE [LABEL]

findfs:查找分區

findfs[options] LABEL=<label>

findfs[options] UUID=<uuid>

4.4 調整ext文件系統參數值

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

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

-L 'LABEL':修改卷標

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

-j: 將ext2升級爲ext3

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

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

-U UUID: 修改UUID號

4.5 查看ext文件系統信息

命令:dumpe2fs

塊分組管理,32768塊

-h:查看超級塊信息,不顯示分組信息

4.6 文件系統檢測和修復

常發生於死機或者非正常關機之後

掛載爲文件系統標記爲“no clean”,注意,如果文件系統是ext2,則可能會顯示no clean,但是沒掛載的時候用dumpe2fs檢查又是clean狀態

注意:一定不要在掛載狀態下修復

fsck檢查文件系統的狀態。可以修復故障的文件系統,取消掛載後才能執行該命令,否則可能會破壞文件系統。該命令慎用,非必要時候不要執行。

fsck -f  /dev/sdb5 多了-f選項,強制檢查硬盤,如果沒有-f,大致檢查。只能修復文件系統,如果數據已經被破壞了,被覆蓋掉的數據就不能修復了,還沒被破壞的數據可以繼續查看

因異常導致的丟失的文件可以到 lost+found文件夾下查找

fsck: File System Check

fsck.FS_TYPE

fsck-t FS_TYPE

-p: 自動修復錯誤

-r: 交互式修復錯誤

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

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

-y:自動回答爲yes

-f:強制修復

5 掛載

5.1 mount 掛載

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

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

把設備關聯掛載點:mount Point

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

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

掛載點目錄一般爲空

掛載方法: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: 綁定目錄到另一個目錄上


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

  async:異步模式

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

  atime/noatime:包含目錄和文件

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

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

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

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

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

  remount:重新掛載

  ro:只讀

  rw:讀寫

  user/nouser:是否允許普通用戶掛載此設備,/etc/fstab使用

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

  loop: 使用loop設備

defaults:圖形界面自動掛載相當於rw, nosuid, dev, exec, auto, nouser,async

    defaults:但是通過mount分區掛載默認是相當於rw, suid, dev, exec, auto, nouser, async

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

cat /proc/mounts

5.2 寫入配置命令

要使得掛載長期有效,即開機時自動掛載,需要往配置文件/etc/fstab寫入相關的信息

配置文件系統體系

被mount、fsck和其它程序使用

系統重啓時保留文件系統體系

可以在設備欄使用文件系統卷標

使用mount -a 命令掛載/etc/fstab中的所有文件系統

/etc/fstab每行定義一個要掛載的文件系統,裏面每個字段的含義如下:


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

設備文件

LABEL:LABEL=""

UUID:UUID=""

僞文件系統名稱:proc, sysfs

掛載點

文件系統類型,相關文件系統類型可見2.3.4節內容

掛載選項:defaults

轉儲頻率:0:不做備份1:每天轉儲2:每隔一天轉儲

自檢次序:0:不自檢

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

自檢次序字段 如果有分區填寫大於1的話,則在檢查完根分區後,接着按填寫的數字從小到大依次檢查下去。同數字 的同時檢查。比如第一和第二個分區填寫2,第三和第四個分區填寫3,則系統在檢查完根分區後,接着同時檢查第一和第二個分區,然後再同時檢查第三和第四個分區。


1240

1240

特殊文件掛載舉例

其中,可以用showmount –e  ip 可以看到對應ip上的共享文件夾,然後再將其掛載上nfs文件格式上


6 卸載

一般情況下,正在被訪問的掛載設備是不能被正常卸載,所以卸載前可以先用以下命名查看情況後在進行卸載

查看掛載情況,可以檢查掛載是否成功

findmnt  MOUNT_POINT|device

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

lsof   MOUNT_POINT

fuser  -v  MOUNT_POINT

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

fuser -km MOUNT_POINT

卸載

umountDEVICE

umountMOUNT_POINT

到這裏爲止,普通分區的使用已經完成,可以正常使用新的分區

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