Linux存儲管理
首先簡單的來了解一下各磁盤的接口類型
IDE:並口,來源於ATA,133Mbps
SCSI:並口,
SATA:Serial ATA,串口
SAS:串口
USB:串口
並口與串口都有其各自的優勢,並不能說哪個好,只是現在串口用得更廣泛。
其中有一個參數IOPS用來衡量磁盤的傳輸速度。
IOPS:每秒IO次數
在學習磁盤管理之前,我們先要了解一下機械硬盤的構造和工作原理。詳情請見
在瞭解了機械硬盤的構造和工作原理後,我們就可以學習磁盤管理相關知識了。
Linux中的磁盤(也可以叫設備)的各種基本概念:
設備文件、設備號、設備類型、設備文件名、設備引用方式
設備文件:/dev
設備文件是關聯到硬件設備的驅動程序和設備的訪問入口;
設備號:
major:主設備號,區分設備的類型,用於標明設備所需的驅動程序;
minor:次設備號,區分同種類型下的不同設備,是特定設備的訪問入口;
mknod命令:
mknod - make block or character special files
mknod [OPTION]... NAME TYPE [MAJOR MINOR]
設備類型:
塊設備:用於隨機訪問的設備,數據存儲和交換的單位是塊;
字符設備:用於線性訪問的設備,數據的交換單位一般是字符;
設備文件名:IANA-->ICANN
/dev/
IDE:hd[a-d]
SCSI/SATA/SAS/USB:sd[a-z]
RHEL6、CentOS6開始:
所有的接口類型的硬盤設備統一命名爲sd[a-z]
設備引用方式:
設備文件名
卷標(Volume Lable)
link
UUID:全局唯一標識符,128bit
先增加新硬盤再使用,在開機狀態下增加硬盤時,需要輸入以下命令
~]# echo '- - -' > /sys/class/scsi_host/host2/scan
強制內核識別在開機狀態下插上的SCSI接口的磁盤
那我們如何使用一個新的硬盤設備呢?答案就是分三步
1.分區
2.創建文件系統(格式化)
3.掛載分區
1.
爲何分區?
1.優化I/O性能
2.實現磁盤空間的配額限制
3.進行高速修復
4.隔離系統文件和其他程序文件
5.安裝多個操作系統
如何分區?
MBR:硬盤空間小於2TB
注意:
1.主分區+擴展分區,最多可以有4個,其分區表位的編號依次爲:1,2,3,4
2.邏輯分區的編號從5開始,不管前面的四個數字編號是否被佔用;
GPT:硬盤空間大於2TB
GUID Partition Table,GUID分區表,支持128個分區
UEFI(統一擴展固件接口)的硬件可以支持GPT Boot Legacy
通常使用的分區工具:
fdisk:
用於創建和管理MBR分區,對於一塊硬盤,最多隻能管理15個分區;
gdisk:GNU disk
用於創建和管理GPT分區,
fdisk分區示例:
fdisk - Partition table manipulator for Linux
fdisk -l [device...]
查看指定磁盤的分區表,如果省略device參數,則顯示所有磁盤設備的分區 表;
fdisk device
對於指定設備進行分區管理;
注意:使用fdisk只是在內存當中進行,並沒有在硬盤中真正實時操作,分好區之後,如果不使用 子命令‘w’保存的話,剛纔的操作無意義。
parted(建議對磁盤管理非常熟悉的人才使用):GNU
高級分區工具,實時生效;
parted - a partition manipulation program
parted [options] [device [command [options...]...]]
parted /dev/sdb mklabel gpt|msdos
parted /dev/sdb print
parted /dev/sdb mkpart primary 1 200
parted /dev/sdb rm 1
如果使用fdisk或gdisk命令對於已經有分區並掛載的磁盤的剩餘空間進行再次分區,分區的信息即便 是保存了,也不會被內核重新讀取;如果要讓內核識別此類分區:
1.重啓計算機;
2.partprobe命令或者partx命令,強制內核重讀分區表;
CentOS5/7:partprobe -a [device] 如果省略了設備名,則表示重讀所有磁 盤的分區表
CentOS6/7:partx -a [device]
kpartx -af [device]
2.
創建文件系統(也可以說是格式化):
創建文件系統實際上就是給分區進行存儲空間的邏輯編址;爲了更好地對磁盤進行管理與操作。
格式化:
低級格式化:
物理層面完成格式化,在磁盤設備出廠時,通過低級格式化來創建磁道;
主要作用:劃分磁道
高級格式化:
分區之後進行,
主要作用:用來創建文件系統,爲分區構建邏輯編址單元,簇,塊
無論是簇還是塊,都是將一個或多個扇區組織在一起,共同完成數據存儲;
簇:512B 1024 2048 4096 8192 16384 32768 65536
塊:1024 2048 4096
注意:
1.一個塊只能放置一個文件的內容,一個文件可以佔用多個塊;
2.如果在某個分區中,將創建大量的小文件,把塊劃分的小一些; 反之,塊就大些
3.如果分區空間比較大,塊也應該大一些;
隨着磁盤空間越來越大,劃分的塊的數量也越來越多,之前所劃分的元數據塊與數據塊管理起來很不方便,所以出現了劃分分組,劃分塊組就可以解決該問題
劃分分組:
塊組:
每個塊組中有獨立的元數據塊和數據塊
存放數據的時候,以塊組內的數據塊優先選擇,如果塊組內的數據塊不夠,可以通過 存儲策略來請多個塊組協同存儲;
超級塊:
主要定義了有多少個塊組,以及每個塊組的邊界。
注意:爲了防止超級塊發生故障倒置整個文件系統崩潰,對超級塊進行冗餘備份。
日誌塊:
對於數據的寫入操作做記錄的塊;
防止數據不一致;
數據不一致通常都是由不潔關機,不潔斷電導致;
所以總結一下一個完整的文件系統到底是怎樣的。
一個完整的文件系統:
超級塊,inode,inode bitmap,block bitmap,data block,journal block
舉個例子瞭解一下文件系統查找:
想要查找/var/log/messages文件的內容,是怎樣的過程?
首先查找/目錄inode編號,從元數據區域中找到對應inode,再讀取inode中的數據塊指針,找到存放/目錄內容的數據塊;
然後,在數據塊中查找名稱爲var的文件名,如果有,就定位其inode編號,再到元數據區域中查找對應編號的inode,再根據數據塊指針找到保存var目錄內容的數據塊;
再然後,在該數據塊中查找名稱爲log的文件名,如果有,就定位其inode編號,再到元數據區域中查找對應編號的inode,再根據數據塊指針找到保存log目錄內容的數據塊;
之後,在該數據塊中查找名稱爲messages的文件名,如果有,就定位其inode編號,再到元數據區域總查找對應編號的inode,再根據數據塊指針找到messages文件對銀的數據塊,就可以讀取數據;
Linux支持的文件系統:
位於內核空間中的文件系統驅動
1.內核一部分
2.內核模塊
位於用戶空間中的文件系統管理應用程序
管理命令
Linux自己的文件系統:
ext ext2 ext3 ext4(最大分區50TB,可以做根分區,可以做啓動分區)
xfs(企業級64位文件系統,最大分區500TB,可以做根和啓動分區)
reiserfs(良好的反刪除功能)
btrfs(技術預覽版)
光盤文件系統:iso9660
網絡文件系統:NFS、CIFS
集羣文件系統:gfs2、ocfs2
內核級的分佈式文件系統:ceph
僞文件系統:proc、sysfs、tmpfs、hugepagefs
windows的文件系統:vfat,ntfs
Unix的文件系統:ufs,FFS,JFS,zfs
交換分區文件系統:swap
用戶空間中的分佈式文件系統:mogilefs,moosefs,glusterfs
對於不同的發行版的Linux,都有其默認的文件系統選擇:
RHEL、CentOS
5:ext3
6:ext4
7:xfs
文件系統的管理工具: mkfs、fsck、dumpe2fs、tune2fs、
管理文件系統:
創建文件系統:
mkfs
mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.xfs, mkfs.btrfs, ...
文件系統檢測和修復工具
fsck
fsck.ext3, fsxk.ext3, fsck.ext4, fsck.xfs, ...
文件系統屬性查看工具
dumpe2fs
文件系統的屬性調整工具
tune2fs
創建文件系統工具:
mkfs命令:
mkfs - build a Linux filesystem
mkfs [options] [-t type] [fs-options] device [size]
mkfs -t ext2 /dev/sdb1
注意:
1.不要使用磁盤設備名稱和擴展分區設備名稱作爲mkfs命令的參數;
如果使用磁盤設備作爲mkfs的參數,所有的分區都將被刪除
如果使用擴展分區作爲mkfs的參數,所有的邏輯分區都將被刪除
2.能夠作爲mkfs命令參數的設備,是主分區設備和邏輯分區設備;
如果只是計劃創建ext系列文件系統的話,可以使用mke2fs命令:
mke2fs:
mke2fs - create an ext2/ext3/ext4 filesystem
常用選項:
-b block-size:在創建文件系統時,調整塊大小;
-i bytes-per-inode:指明inode與字節的比率,即:多少個字節可 以建一個inode,默認值爲16384;
-j:創建有日誌功能的文件系統,就是ext3
-N number-of-inodes:直接指明要給此文件系統創建的inode的數 量;
-m reserved-blocks-percentage:指定爲超級用戶root預留的磁盤 空間的百分比;默認是5;
-t fstype:指定文件系統類型,ext2 ext3 ext4,默認是ext2
-O [^]feature[,...]:關閉或開啓文件系統的特性
-L volume-label:爲文件系統指定卷標
如果只計劃修改ext系列文件系統的卷標,可以使用e2label命令:
e2label:
e2label - Change the label on an ext2/ext3/ext4 filesystem
e2label device [ new-label ]
注意:如果不加捲標信息,表示查看指定設備的卷標;
如果添加了卷標信息, 表示修改指定設備的卷標;
如果想要修改ext系列文件系統的屬性,可以使用tune2fs命令:
tune2fs:
tune2fs - adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems
調整那些在ext2,3,4文件系統上的可修改的參數;
常用選項:
-j:將ext2文件系統修改爲ext3;
-m reserved-blocks-percentage:修改爲超級用戶預留的磁盤空間 的百分比;
-o [^]mount-options[,...]:修改文件系統的默認掛載選項;
-r reserved-blocks-count:修改爲超級用戶預留的磁盤空間的塊 的數量;
-L volume-name:修改文件系統的卷標
-O [^]feature[,...]:修改文件系統的特性,將其關閉或啓用;
-l:顯示超級塊的內容 相當於dumpe2fs -h
文件系統的檢測修改工具:
fsck
-t fstype:指定要檢測的文件系統類型;
-a:無需交互,自動修復所有問題
-r:交互式修復問題
ext系列文件系統專門的檢測修復工具:
e2fsck
-y:在交互過程的所有的問題,都以"yes"回答;
-f:強制檢測修復;即使文件系統處於clean狀態;
blkid:
blkid - command-line utility to locate/print block device attributes
blkid -L label:根據卷標進行查找
blkid -U uuid:根據UUID進行查找
findfs:
findfs - Find a filesystem by label or UUID
findfs LABEL=label
findfs UUID=uuid
創建swap文件系統
前提:分區類型必須是swap類型
修改的方法是:在fdisk交互模式中,使用t命令將指定分區的類型修改爲82即可;
mkswap
mkswap - set up a Linux swap area
-L LABEL:設置交互分區的卷標
-f:強制執行
掛載:
根文件系統之外的其他文件系統如果想要被訪問;都必須通過某種方式關聯到根文件系統上,具體做法就是把其他文件系統裝載到根文件系統中的某個目錄之中;這個過程稱爲"掛載";用於關聯其他文件系統的那個目錄,稱爲掛載點;
掛載點:mount point,也是其他文件系統的訪問入口;例如:/boot
要求:
1.作爲掛載點的目錄必須事先存在;
2.作爲掛載點的目錄應該是沒有被使用或不能被其他進程使用的目錄;
3.作爲掛載點的目錄一旦掛載文件系統,其內原有的文件將被隱藏;
完成掛載操作,使用mount命令:
mount
mount - mount a filesystem
mount [-fnrsvw] [-t vfstype] [-o options] device dir
常用選項:
-r:readonly,以只讀的方式掛載目標文件系統;光盤
-w:read and write,以讀寫的方式掛載目標文件系統;
-n:默認情況下,設備掛載或卸載的操作會同步更新到/etc/mtab 中,如果在掛載時使用了-n選項,則表示我們要禁用此特性, 即便掛載成功,也不會更新到/etc/mtab中。
-t vsftype:指明要掛載的設備上創建的文件系統類型;如果省略 該選項,mount命令會通過blkid來判斷要掛載的目標 設備的文件系統類型;
-L LABEL:掛載文件系統時,使用卷標代替設備名稱
-U UUID:掛載文件系統時,使用UUID代替設備名稱
-a:mount -a:按照/etc/fstab文件中填寫的設備進行自動掛載;
-o option:
sync/nosync:同步/異步操作
atime/noatime:文件或目錄被讀取訪問時,是否更新訪問 時間戳;
diratime/nodiratime:目錄被讀取訪問時,是否更新訪問 時間戳;
ro/rw:是以只讀/讀寫的方式掛載文件系統;
dev/nodev:在此文件系統中是否允許創建設備文件;
exec/noexec:在此文件系統中是否允許運行程序文件;
auto/noauto:是否允許使用mount -a方式掛載/etc/fstab 中的文件系統;
user/nouser:是否允許普通用戶掛載此文件系統;
suid/nosuid:是否允許程序文件上的SUID和SGID特殊權限 生效;
relatime/norelatime:是否參考inode訪問時間來修改其 修改時間和改變時間
remount:不經卸載實現重新掛載,可以應用新的掛載選 項;
acl:可以使文件系統支持facl功能;
defaults:默認選項;包括:rw, suid, dev, exec, auto, nouser, async, and relatime
loop:使用環回設備;將鏡像文件掛載到掛載點;
defaults,ro,nosuid
-B, --bind:將某個目錄綁定至另一個目錄;
mount --bind|-B 源目錄 目標目錄
卸載文件系統:
umount mount_point|device
掛載光盤:
1.保證光盤鏡像文件放入虛擬機光驅
2.保證光驅處於"已連接"狀態
3.創建光盤掛載點,mount -r /dev/sr0 mount_point
掛載U盤:
需要事先讓系統識別U盤設備,然後根據設備名進行掛載;/dev/sdc1
掛載交互分區:
swapon, swapoff
swapon, swapoff - enable/disable devices and files for paging and swapping
-a:自動掛載存儲於/etc/fstab文件中的交互分區設備;
如果想要每次開機都實現掛載的話,就必須把掛載信息寫入/etc/fstab文件中。
/etc/fstab文件的格式:
共6個字段,使用空白字符分隔:
1.要掛載的設備
設備文件名
LABEL
UUID
僞文件系統
2.掛載點
swap設備無需掛載點,指定swap即可;
3.文件系統類型
4.掛載選項:defaults
5.轉儲頻率:
使用dump命令備份分區的頻率
0:表示不備份
1:每天備份一次
2:每隔一天備份一次
6.自檢次序
0:不自檢
1:優先自檢,通常只設置在根文件系統上;
2:次級自檢
...
9:最低優先級自檢
例如: echo "/dev/sda6 /mnt ext4 defaults 2 1" >> /etc/fstab
在分區、創建文件系統、掛載、修改/etc/fstab都弄好之後,我們可以用df、free命令查看相關的磁盤信息。
df:
df [選項]... [文件]...
常用選項:-h -T -P
free:
free [options]
常用選項:-k -m -g