磁盤管理
設備文件
I/O Ports: I/O設備地址
一切皆文件:
open(), read(), write(), close()
設備類型:
塊設備: block,存取單位“塊”,磁盤
字符設備: char,存取單位“字符”,鍵盤
設備文件:關聯至一個設備驅動程序,進而能夠跟與之對應硬件設備進行通信
設備號碼:
主設備號: major number, 標識設備類型
次設備號: minor number, 標識同一類型下的不同設備
[root@localhost ~]# ll /dev/sda*
brw-rw—-. 1 root disk 8, 0 Aug 25 05:24 /dev/sda
brw-rw—-. 1 root disk 8, 1 Aug 25 05:24 /dev/sda1
brw-rw—-. 1 root disk 8, 2 Aug 25 05:24 /dev/sda2
brw-rw—-. 1 root disk 8, 3 Aug 25 05:24 /dev/sda3
brw-rw—-. 1 root disk 8, 4 Aug 25 05:24 /dev/sda4
brw-rw—-. 1 root disk 8, 5 Aug 25 05:24 /dev/sda5
brw-rw—-. 1 root disk 8, 6 Aug 25 05:24 /dev/sda6
8為設備類型,1.2.3.4.5.6為同一設備類型的不同編號
硬盤接口類型
并行:(數據傳輸的互相干擾)
IDE: 133MB/s
SCSI: 640MB/s
串口:(減少數據傳輸的互相干擾)
SATA: 6Gbps
SAS: 6Gbps
USB: 480MB/s
rpm: rotations
per minute
設備文件
磁盤設備的設備文件命名: /dev/DEV_FILE
IDE: /dev/hd
SCSI, SATA, SAS, USB: /dev/sd
不同設備: a-z
/dev/sda, /dev/sdb, …
同一設備上的不同分區: 1,2, …
/dev/sda1, /dev/sda5
硬盤結構
硬盤存儲術語
head:磁頭 8個字節存放磁頭 有256
track:磁道
cylinder: 柱面
secotr: 扇區, 一個扇區的容量為512bytes
一盤面容量: 512*secotr * track*head
cylinder
一柱面容量=track*head
在centos 6上fdisk -l /dev/sda 默認以柱面顯示磁盤
在centos 7 上fdisk -l /dev/sda 默認以扇區顯示磁盤
磁盤分區
為什么是分區?
? 優化I/O性能
系統,數據庫,日志等劃分分區,有優化效果
? 實現磁盤空間配額限制
? 提高修復速度
假若系統文件與數據庫文件在同一分區,那么數據的修復速度就很慢了
? 隔離系統和程序
? 安裝多個OS
分區
兩種分區方式: MBR, GPT
MBR: Master Boot Record,主引導記錄, 1982年, 使用32位表示扇區數, 分區最多表示 2^32容量2^32*512字節=不超過2T
如何分區:按柱面
0磁道0扇區: 512bytes
446bytes: boot loader
64bytes:分區表
16bytes: 標識一個分區
2bytes: 55AA(沒有55AA,系統認為是一個裸盤 , 沒有分區的硬盤 , 系統會提示重新分區)
4個主分區; 3主分區+1擴展(N個邏輯分區)
==>可以使用命令查看磁盤前512的二進制的字節
[root@localhost ~]# hexdump -C -n 512 /dev/sda
lsblk看到是內存上的磁盤分區表,有可能不會同步,用partx /dev/sd[磁盤號] 而fdisk看的是磁盤上分區表
如果只清空55 aa 兩個字節用命令 , 清空后會默認為該磁盤未分區
dd if=/dev/zero of=/dev/sda ba=1 count=2 skip=510(跳過if 510個字節) seek=510(跳過of的 510個字節)
增加硬盤后掃描硬盤
echo "- – -" > /sys/class/scsi_host/host0
host0 host1 host2
MBR分區結構
GPT分區
GPT:GUID patition table 全局唯一標識分區表 , 支持128個分區,使用64位,支持8Z(512Byte/block )64Z (4096Byte/block)
使用128位UUID 表示磁盤和分區 GPT分區表自動備份在頭和尾兩份,并有CRC校驗位
使用GPT分區必須要有硬件支持
UEFI (統一擴展固件接口)硬件支持GPT , 使操作系統啟動
UUID隨機生成,有時間硬件設備等其他特征信息組成格式為8-4-4-8
GPT分區結構
EFI部分又可以分為4個區域: EFI信息區(GPT頭)、分區表、 GPT分區、備份區域
管理分區
列出塊設備
lsblk
lsblk看到的信息與ls /dev/sd* 和cat /proc/partitions 看到的信息一樣,是內存中生效的信息,磁盤更改后的信息未必與內存中的同步 , fdisk就是磁盤實時的分區信息
創建分區使用:
? fdisk 創建MBR分區,也支持GPT(并不完美),對于一塊硬盤,最多只能管理15分區
? gdisk 創建GPT分區
? GNU parted 高級分區操作(創建、復制、調整大小等等)
parted /dev/sd* mklabel {label-type : gpt msdos . . . }
partprobe-重新設置內存中的內核分區表版本
分區工具fdisk和gdisk
fdisk /dev/sdb
gfisk /dev/sdb
# fdisk -l [-u] [device…]
子命令:
p 分區列表
t 更改分區類型
n 創建新分區
d 刪除分區
w 保存并退出
q 不保存并退出
同步分區表
查看內核是否已經識別新的分區:
# 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 /dev/sd
CentOS 5, 7: 使用partprobe
partprobe [/dev/DEVICE]
parted命令
parted的操作都是實時生效的,小心使用
用法: parted [選項]… [設備 [命令 [參數]…]…]
parted /dev/sdb mklabel gpt|msdos
parted /dev/sdb print
parted /dev/sdb mkpart primary 1 200
parted /dev/sdb rm 1
parted -l
文件系統
文件系統是操作系統用于明確存儲設備或分區上的文件的方法和數據結構;即在存儲設備上組織文件的方法。
操作系統中負責管理和存儲文件信息的軟件結構稱為文件管理系統,簡稱文件系統。
從系統角度來看,文件系統是對文件存儲設備的空間進行組織和分配,負責文件存儲并對存入的文件進行保護和檢索的系統。
具體地說,它負責為用戶建立文件,存入、讀出、修改、轉儲文件,控制文件的存取,安全控制,日志,壓縮,加密等。
文件系統類型
Linux文件系統: ext2(extended file system 擴展的文件系統), ext3, ext4,
xfs( 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
RAW:未經處理或者未經格式化產生的文件系統
文件系統分類
根據其是否支持"journal"功能:
日志型文件系統: ext3, ext4, xfs, …
非日志型文件系統: ext2, vfat
文件系統的組成部分:
內核中的模塊: ext4, xfs, vfat
用戶空間的管理工具: mkfs.ext4, mkfs.xfs,mkfs.vfat
Linux的虛擬文件系統: VFS(用戶訪問文件系統的時候不會直接訪問真正的文件系統,發開人員會在真正的文件系統上搭建一個VFS,用戶訪問的時候會通過VFS間接的訪問文件系統)
查前支持的文件系統: cat /proc/filesystems
lsmod 查看加載到內核的文件系統模式
VFS模型 :
文件系統選擇
并非最新的文件系統是最好的,選用文件系統要時生產環境而定 , 但是 ext系列是生產環境用得最多的(穩定)
創建文件系統
mkfs命令:
(1) # mkfs.FS_TYPE /dev/DEVICE
ext2 ext3 ext4
xfs
btrfs
vfat(文件系統功能簡單)
(2) # mkfs -t FS_TYPE /dev/DEVICE
-L 'LABEL': 設定卷標
創建ext文件系統
mke2fs: ext系列文件系統專用管理工具
-t {ext2|ext3|ext4} (指定創建的文件系統格式)
-b {1024|2048|4096} (指定塊大小,默認4096)
-L 'LABEL' (指定卷標)
-j: 相當于 -t ext3 (不指定文件系統格式時-t 默認是創建ext2,就是不帶日志功能, 加-j 就是增加日志功能, 相當于ext3)
mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i #: 為數據空間中每多少個字節創建一個inode;此大小不應該小于block的大小 (數據塊與inode比例)
-N #:為數據空間創建個多少個inode
-I 一個inode記錄大小128—4096
-m #: 默認5%,為管理人員預留空間占總空間的百分比
-O FEATURE[,…]:啟用指定特性
-O ^FEATURE:關閉指定特性
文件系統標簽
指向設備的另一種方法
與設備無關
blkid:塊設備屬性信息查看
blkid [OPTION]… [DEVICE]
-U UUID: 根據指定的UUID來查找對應的設備
-L LABEL:根據指定的LABEL來查找對應的設備
e2label:管理ext系列文件系統的LABEL
# e2label DEVICE [LABEL]
findfs :查找分區
findfs [options] LABEL=<label>
findfs [options] UUID=<uuid>
tune2fs (只試用ext系列文件系統)
tune2fs:重新設定ext系列文件系統可調整參數的值
-l:查看指定文件系統超級塊信息; super block
-L 'LABEL':修改卷標
-m #:修預留給管理員的空間百分比
-j: 將ext2升級為ext3
-O: 文件系統屬性Filesystem features啟用或禁用, –O ^has_journal
-o: 調整文件系統的默認掛載選項,–o ^acl
-U UUID: 修改UUID號
dumpe2fs:
-h:查看超級塊信息(分組信息),分區用分組管理
我們只需了解基本的項就OK了
[root@localhost sdb1]# tune2fs -l /dev/sdb1
tune2fs 1.42.9 (28-Dec-2013) #tune2fs版本號
Filesystem volume name: <none>
Last mounted on: /sdb1 #分區掛載點
Filesystem UUID: c64673c4-410c-40ac-92c2-5dc89e509bf8 #設備UUID號
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: ext_attr resize_inode dir_index filetype sparse_super large_file #文件系統特性
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: not clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 65536 #inode數
Block count: 262144 #block數
Reserved block count: 13107
Free blocks: 257701 #空閑block數
Free inodes: 65525 #空閑inode數
First block: 0 #第一個塊編號
Block size: 4096 #一個block的大小
Fragment size: 4096
Reserved GDT blocks: 63
Blocks per group: 32768 #一個組的block數量
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512 #inode與block比
Filesystem created: Thu Aug 25 20:53:52 2016
Last mount time: Thu Aug 25 21:25:17 2016
Last write time: Thu Aug 25 21:28:07 2016
Mount count: 1 #掛載次數
Maximum mount count: -1
Last checked: Thu Aug 25 20:53:52 2016
Check interval: 0 (<none>)
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Default directory hash: half_md4
Directory Hash Seed: 12dabb50-85cf-4a1c-a1ab-534289e5033c
超級塊和inode table
文件系統檢測和修復
常發生于死機或者非正常關機之后 , 掛載為文件系統標記為“ dirty”
fsck: File System Check
fsck.FS_TYPE
fsck -t FS_TYPE
-a: 自動修復錯誤
-r: 交互式修復錯誤
注意: FS_TYPE一定要與分區上已經文件類型相同;
e2fsck: ext系列文件專用的檢測修復工具
-y:自動回答為yes
-f:強制修復
fsck 退出的返回值是下列情況之和:
0 – 沒有錯誤
1 – 文件系統有錯但已修復
2 – 系統應當重啟
4 – 文件系統錯誤沒有修復
8 – 運行錯誤
16 – 用法或語法錯誤
32 – 用戶撤銷了fsck 操作
128 – 共享庫出錯
掛載mount
掛載:將額外文件系統與根文件系統某現存的目錄建立起關聯關系,進而使得此目錄做為其它文件訪問入口的行為
卸載:為解除此關聯關系的過程
把設備關聯掛載點: 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: 綁定目錄到另一個目錄上(文件夾掛載文件夾)
–loop 掛載光盤
-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
查看內核追蹤到的已掛載的所有設備:
cat /proc/mounts
mount能查看掛載情況,等同于cat /etc/mtab 和cat /proc/mount 但是cat /proc/mount 更加全面
(因為有時候內核并不能同步得上,此時可以使用 partx -a /dev/sd)
mount -o remount 取消掛載然后重掛載
卸載命令
查看掛載情況:
#findmnt MOUNT_POINT
查看正在訪問指定文件系統的進程:
#lsof MOUNT_POINT
#fuser -v MOUNT_POINT
終止所有在正訪問指定的文件系統的進程:
# fuser -km MOUNT_POINT
卸載:
# umount DEVICE
# umount MOUNT_POINT
掛載點和/etc/fstab
文件掛載配置文件
/etc/fstab 每行定義一個要掛載的文件系統;
要掛載的設備或偽文件系統(若是設備文件,通常寫UUID號,不寫設備名稱(如 : /dev/sda1) , 假若有分區sda1 2 3 ,刪除sda2,只是釋放了原本標記sda2的UUID號,刪除sda2之后,sda3回變成sda2,也就是說原本sda3的)
UUID=fc4ece99-fdb9-4729-904b-a9a482ae86fc
掛載點
/
文件系統類型
xfs
掛載選項
defaults
轉儲頻率
0 ( 第一個 )
自檢次序
0 ( 第二個 )
要掛載的設備或偽文件系統:
設備文件、 LABEL(LABEL="")、 UUID(UUID="")、偽文件系統名稱(proc,sysfs)
掛載選項: defaults
轉儲頻率: 0:不做備份
1:每天轉儲
2:每隔一天轉儲
自檢次序: 0:不自檢
1:首先自檢;一般只有rootfs才用1
#
# /etc/fstab
# Created by anaconda on Wed Jul 20 14:32:52 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=fc4ece99-fdb9-4729-904b-a9a482ae86fc / xfs defaults 0 0
UUID=49da300e-4396-48c5-ac3d-73e77089ca37 /boot xfs defaults 0 0
UUID=19c99cb5-4c12-48aa-a667-fa8885ba583c /testdir xfs defaults 0 0
UUID=28eb87fb-bf7c-4eaf-bacb-b198a74a47e3 swap swap defaults 0 0
UUID=2898f9f4-b33d-4d8c-8d51-84c9823f198e /testdir2 ext3 defaults 0 0
原創文章,作者:hunter,如若轉載,請注明出處:http://www.www58058.com/42188
總結的很詳細,贊一個,但要多進行操作哦