? 本篇內容如下:
1、硬盤結構
2、磁盤分區類型
3、管理分區
4、文件系統
5、掛載
一、硬盤結構
以下只針對機械硬盤。
通過電機轉動,主軸開始旋轉,主軸上的磁盤也跟著轉動,每個磁盤有兩個盤面,磁臂上磁頭通過盤面來讀取或者存儲計算機上的數據。
1、硬盤存儲術語
盤面:每個磁盤有兩個盤面
磁頭:有幾個磁頭就有幾個盤面
磁道:磁頭不動時隨著主軸轉動畫出的圓形軌跡
扇區:每個扇區一般為512字節
柱面:每個盤面劃分出相等的磁道,由編號相同的磁道生成的圓柱體
2、設備文件
磁盤設備的設備文件命名:/dev/DEV_NAME
IDE:/dev/hd
SISC,SAST,SAS,USB:/dev/sd
不同設備a-z
/dev/sda,/dev/sdb
同一設備的不同分區:1,2,3,4…
/dev/sda1,/dev/sda2,/dev/sda3
二、磁盤分區
1)為什么要給磁盤分區,因為給磁盤分區后,可以方便我們的管理,總結一下有以下優點:
1、優化I/O性能
2、實現空間配額限制
3、提高修復速度
4、隔離系統和程序
5、安裝多個OS
2)兩種分區方式:MBR與GPT
在說MBR結構之前先說一下CHS的尋址方式,C:Cylinder柱面,H:heads磁頭,S:Sector扇區。這三種的取值范圍分別為0到Cylinder-1,0到Heads-1,1-Sector(注意:扇區是從1開始)
MBR硬盤分區結構圖如下
在磁盤起始處,也就是0磁頭的0柱面第一個扇區為MBR,大小為512個字節,單獨剖開MRB來看,其中分為3部分:前446字節為主引導程序,中間64個字節為主分區表,后面兩個字節為標識位,為55 AA,如果其內容被修改,則分區表的顯示可能就會出現問題。
1、前446字節為主引導程序,系統啟動時用來引導系統找到活動分區,啟動系統
2、中間64個字節可細分為四個16字節。即每16字節表示一個分區
16字節中:
第1個字節表示此分區是否為活動分區,80表示為活動,00為非活動。
第2-4字節表示CHS尋址的起始位置
第5個字節表示該分區的類型,如83為inux Swap 分區,8e為LVM類型。如果為0表示未使用
第6-8字節表示CHS尋址的結束位置
第9-12字節表示LBA尋址的起始位置
第12-16字節表示LBA尋址的結束位置
LBA尋址方式:即Logical BlockAddressing,邏輯塊尋址模式。在CHS尋址方式中,因為角速度相同,所以盤片內部的磁道的性能遠不如磁盤外部的性能,為了改善這種情況,人們改用等密度結構生產硬盤,也就是說外圈磁道的扇區比內圈的多,而采用這個結構后便不再能夠像以前那樣使用CHS的尋址方式,只能改為LBA方式,所以上述的
LBA就是此意。
3、后面2個字節為表示位,通常為55 AA,如果這兩個字節被破壞,則分區表顯示會有問題
上面所說的中間64字節為主分區表,但如果有擴展分區,擴展分區大家都知道,可以繼續的分為許多個邏輯分區,不過這些邏輯分區都只能在擴展分區的地界進行劃分。而在上面所說的16字節中,并不能顯示每個邏輯分區的地址界限,只能把整個的擴展分區的界限給顯示出來。
擴展分區
如上面MBR分區方式圖所示,擴展分區的第一個扇區也有類似于MBR的一種結構,其名為EBR,也占有512個字節。
1、前446字節為空,只是為了與MBR結構一致
2、中間64字節也分為四個16字節
第一個16字節結構類似于MBR,并指向第一個邏輯分區
第二個16字節指向的是第二個EBR,以此循環
后面32個字節暫時未被使用。
GPT分區
GPT:GUID patition table 支持128個分區,使用64位,支持8Z(512Byte/block )64Z
(4096Byte/block),使用128位UUID 表示磁盤和分區GPT分區表自動備份在頭和尾兩份,并有CRC校驗位,UEFI
(統一擴展固件接口)硬件支持GPT,結構如下圖所示
基本上可以分為六個部分:
1、Protect MBR,用來保護分區,因為傳統的分區方式不識別GPT分區,需要填充上傳統MBR的標識位即55 AA。
2、GPT信息頭部
3、GPT分區表
4、GPT分區
5、GPT的備份區域
6、GPT的備份區頭部
三 管理分區
1)創建分區
創建分區使用:
?fdisk創建MBR分區,也支持GPT,對于一塊硬盤,最多只能管理15分區
?gdisk創建GPT分區
?GNU parted高級分區操作(創建、復制、調整大小等等)
分區工具fdisk和gdisk使用操作相似,下面舉例fdisk
# fdisk -l [-u] [device…]
子命令:
p 分區列表
t 更改分區類型
n 創建新分區
d 刪除分區
w 保存并退出
q 不保存并退出
2)同步分區表
有些時候雖然已經對磁盤作出了操作,但是內存和磁盤并不同步,所以需要通知內存重讀磁盤信息,保持信息的同步性。
注意:在CentOS 5,7上使用partprobe,CentOS 6上使用partprobe卻是不管用,所以CentOS6上使用partx -a DISK_NAME
3)parted命令
parted的操作都是實時生效的,小心使用,下面演示的利用parted命令創建gpt類型并分區
四 文件系統
何為文件系統?文件系統是操作系統用于明確存儲設備或分區上的文件的方法和數據結構;即在存儲設備上組織文件的方法。操作系統中負責管理和存儲文件信息的軟件結構稱為文件管理系統,簡稱文件系統。
Block:Linux文件系統存儲數據的最小單位,分為1K,2K和4K。
超級塊:超級塊作用是存儲文件系統的大小,空閑block以及inode數量等等諸如此類的信息,要使用一個分區來進行數據訪問,那么第一個要訪問的就是超
級塊,所以,如果超級塊壞了,那磁盤也就無法訪問了。所以為了防止超級塊數據被破壞,則需要對超級塊僅進行數據備份,以便于損壞時修復
1)文件系統類型
Linux文件系統: ext2, 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
Linux通過VFS來支持多樣化的文件系統
2)創建文件系統
mkfs命令:
(1) # mkfs.FS_TYPE /dev/DEVICE
FS_TYPE:btrfs cramfs ext2 ext3 ext4 fat minix msdos vfat xfs
[root@localhost ~]# mkfs.ext2 /dev/sdb1 //創建ext2類型的文件系統 mke2fs 1.42.9 (28-Dec-2013) Filesystem label= OS type: Linux Block size=1024 (log=0) //塊大小為1024 Fragment size=1024 (log=0) Stride=0 blocks, Stripe width=0 blocks 124928 inodes, 499712 blocks 24985 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=67633152 61 block groups 8192 blocks per group, 8192 fragments per group 2048 inodes per group Superblock backups stored on blocks: //超級塊存儲在 8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409 Allocating group tables: done Writing inode tables: done Writing superblocks and filesystem accounting information: done
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
-m #: 默認5%,為管理人員預留空間占總空間的百分比
-O FEATURE[,…]:啟用指定特性
-O ^FEATURE:關閉指定特性
[root@localhost ~]# mke2fs -t ext4 /dev/sdb5 //創建ext4文件系統 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=1024 (log=0) //塊大小為1K Fragment size=1024 (log=0) Stride=0 blocks, Stripe width=0 blocks 4016 inodes, 16032 blocks 801 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=16515072 2 block groups 8192 blocks per group, 8192 fragments per group 2008 inodes per group Superblock backups stored on blocks: 8193 Writing inode tables: done Creating journal (1024 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 31 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. [root@localhost ~]# mke2fs -t ext4 -b 4096 /dev/sdb5 //指定塊大小為4K mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) //塊大小為4K Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 4032 inodes, 4008 blocks 200 blocks (4.99%) reserved for the super user First data block=0 1 block group 32768 blocks per group, 32768 fragments per group 4032 inodes per group Writing inode tables: done Creating journal (1024 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 21 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override
3)文件系統標簽
指向設備的另一種方法
blkid:塊設備屬性信息查看
blkid[OPTION]… [DEVICE]
-U UUID: 根據指定的UUID來查找對應的設備
-L LABEL:根據指定的LABEL來查找對應的設備
e2label:管理ext系列文件系統的LABEL
# e2label DEVICE [LABEL]
tune2fs:重新設定ext系列文件系統可調整參數的值
-l:查看指定文件系統超級塊信息;super block
-L 'LABEL':修改卷標
-m #:修預留給管理員的空間百分比
-j: 將ext2升級為ext3
-O: 文件系統屬性啟用或禁用,–O ^has_journal
-o: 調整文件系統的默認掛載選項,–o ^acl
-U UUID: 修改UUID號;
[root@localhost ~]# tune2fs -l /dev/sdb1 //查看/dev/sdb1的超級塊 tune2fs 1.42.9 (28-Dec-2013) Filesystem volume name: xiaoshui //卷標 Last mounted on: <not available> Filesystem UUID: 4fb146b1-4147-4a43-b023-2d9deb17cc97 Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: ext_attr resize_inode dir_index filetype sparse_super Filesystem flags: signed_directory_hash Default mount options: user_xattr acl Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 124928 //Inode數量 Block count: 499712 //Block數量 Reserved block count: 24985 //block保留數,供管理員使用 Free blocks: 481628 //空閑block塊 Free inodes: 124917 //空閑inode數量 First block: 1 //第一個block塊 Block size: 1024 //block大小 Fragment size: 1024 Reserved GDT blocks: 256 Blocks per group: 8192 //每一個組的block數量 Fragments per group: 8192 Inodes per group: 2048 //每一個組的inode Inode blocks per group: 256 Filesystem created: Fri Aug 26 20:45:25 2016 Last mount time: n/a Last write time: Sat Aug 27 12:09:21 2016 Mount count: 0 Maximum mount count: -1 Last checked: Fri Aug 26 20:45:25 2016 Check interval: 0 (<none>) Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 128 Default directory hash: half_md4 Directory Hash Seed: b6445eaa-a42d-45a0-8411-d4176ac8cb29 [root@localhost ~]# tune2fs -L dashui /dev/sdb1 //修改/dev/sdb1的卷標為dashui tune2fs 1.42.9 (28-Dec-2013) [root@localhost ~]# e2label /dev/sdb1 //查看/dev/sdb1的卷標 dashui //修改成功
dumpe2fs:
-h:查看超級塊信息(分組信息),分區用分組管理
[root@localhost ~]# dumpe2fs -h /dev/sdb1 //使用dumpe2fs查看/dev/sdb1的超級塊信息 dumpe2fs 1.42.9 (28-Dec-2013) Filesystem volume name: dashui Last mounted on: <not available> Filesystem UUID: 4fb146b1-4147-4a43-b023-2d9deb17cc97 Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: ext_attr resize_inode dir_index filetype sparse_super Filesystem flags: signed_directory_hash Default mount options: user_xattr acl Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 124928 Block count: 499712 Reserved block count: 24985 Free blocks: 481628 Free inodes: 124917 First block: 1 Block size: 1024 Fragment size: 1024 Reserved GDT blocks: 256 Blocks per group: 8192 Fragments per group: 8192 Inodes per group: 2048 Inode blocks per group: 256 Filesystem created: Fri Aug 26 20:45:25 2016 Last mount time: n/a Last write time: Sat Aug 27 12:41:34 2016 Mount count: 0 Maximum mount count: -1 Last checked: Fri Aug 26 20:45:25 2016 Check interval: 0 (<none>) Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 128 Default directory hash: half_md4 Directory Hash Seed: b6445eaa-a42d-45a0-8411-d4176ac8cb29 [root@localhost ~]#
4)文件系統檢測和修復
fsck: File System Check
fsck.FS_TYPE
fsck-t FS_TYPE
-a: 自動修復錯誤
-r: 交互式修復錯誤
注意: FS_TYPE一定要與分區上已經文件類型相同;
e2fsck:ext系列文件專用的檢測修復工具
-y:自動回答為yes
-f:強制修復
常發生于死機或者非正常關機之后,掛載為文件系統標記為“dirty”
五 掛載文件系統
掛載:將額外文件系統與根文件系統某現存的目錄建立起關聯關系,進而使得此目錄做為其它文件訪問入口的行為
卸載:解除目錄與設備的聯系
掛載方法:mount DEVICE MOUNT_POINT
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
[root@localhost ~]# blkid //通過blkid查找到/dev/sdb5的UUID /dev/sda1: UUID="7bbc50de-dfee-4e22-8cb6-04d8520b6422" TYPE="ext4" /dev/sda2: UUID="f8yBR5-kH5W-QQB7-3kx4-9Sl1-daC1-k4xGHV" TYPE="LVM2_member" /dev/sdb5: UUID="a7dc763f-64ee-4d4d-902b-7f6017469ddc" TYPE="ext4" /dev/mapper/vg0-root: UUID="42a67ff2-4ca0-4610-8e13-57311331ad02" TYPE="ext4" /dev/mapper/vg0-swap: UUID="e4b0968e-544e-4112-b3ec-3c4cc5fdb9dd" TYPE="swap" /dev/mapper/vg0-usr: UUID="087ba9d3-997f-4465-a215-a090ab248e14" TYPE="ext4" /dev/mapper/vg0-var: UUID="2c0ff242-1422-429a-8671-a644f85a6f8e" TYPE="ext4" /dev/sdb1: UUID="0e5b443a-00e6-4726-b2b5-de3d48192e89" TYPE="ext4" [root@localhost ~]# mount exta9e16e39-4904-4e7f-9552-aba4bc39bc3b /testdir/ mount: you must specify the filesystem type [root@localhost ~]# mount -U exta9e16e39-4904-4e7f-9552-aba4bc39bc3b /testdir/ mount: no such partition found [root@localhost ~]# mount -U a7dc763f-64ee-4d4d-902b-7f6017469ddc /testdir/ //通過UUID掛載 [root@localhost ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/vg0-root 20511356 421188 19041592 3% / tmpfs 502068 0 502068 0% /dev/shm /dev/sda1 194241 34122 149879 19% /boot /dev/mapper/vg0-usr 10190136 2257696 7408152 24% /usr /dev/mapper/vg0-var 20511356 156172 19306608 1% /var /dev/sdb5 14497 138 13558 2% /testdir
dir:掛載點
事先存在;建議使用空目錄
進程正在使用中的設備無法被卸載
[root@localhost ~]# mount //查看當前已掛載的所有設備 /dev/mapper/vg0-root on / type ext4 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw) /dev/sda1 on /boot type ext4 (rw) /dev/mapper/vg0-usr on /usr type ext4 (rw) /dev/mapper/vg0-var on /var type ext4 (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
Mount常用選項:
-t vsftype:指定要掛載的設備上的文件系統類型
-r: readonly,只讀掛載
-w: read and write, 讀寫掛載
-n: 不更新/etc/mtab,相當于#mount
-a:自動掛載所有支持自動掛載的設備(定義在了/etc/fstab文件中,且掛載選項中有auto功能)
-L 'LABEL': 以卷標指定掛載設備
-U 'UUID': 以UUID指定要掛載的設備
-B, –bind: 綁定目錄到另一個目錄上
查看內核追蹤到的已掛載的所有設備:
cat /proc/mounts
-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, nosuid, dev, exec, auto, nouser, async
[root@localhost ~]# mkdir /testdir mkdir: cannot create directory `/testdir': File exists [root@localhost ~]# cd testdir/ [root@localhost testdir]# ls [root@localhost testdir]# cd / [root@localhost /]# mount -r /dev/sdb1 /testdir/ //掛在只讀文件系統 [root@localhost /]# cd /testdir/ [root@localhost testdir]# touch fi touch: cannot touch `fi': Read-only file system //系統提示不能創建fi,因為是只讀文件系統 [root@localhost testdir]# [root@localhost testdir]# umount /dev/sdb1 //卸載/dev/sdb1,因為當前在它的掛在目錄下,所以提示報錯 umount: /testdir: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1)) [root@localhost testdir]# cd [root@localhost ~]# umount /dev/sdb1 //更改目錄后再次卸載,卸載成功 [root@localhost ~]# mount -w /dev/sdb1 /testdir/ //讀寫掛載 [root@localhost ~]# cd /testdir/ [root@localhost testdir]# touch f1 //創建文件f1 [root@localhost testdir]# ls //創建成功 f1 lost+found [root@localhost ~]# mount -o remount,ro /dev/sdb1 //remount重新掛載只讀文件系統 [root@localhost ~]# cd /testdir/ [root@localhost testdir]# ls f1 lost+found [root@localhost testdir]# touch f2 touch: cannot touch `f2': Read-only file system //重新掛載成功,顯示不能Read-only
卸載命令:
查看掛載情況:
#findmntMOUNT_POINT
[root@localhost ~]# findmnt TARGET SOURCE FSTYPE OPTIONS / /dev/mapper/vg0-root ext4 rw,relatime,barrier=1,data=ordered ├─/proc proc proc rw,relatime │ ├─/proc/bus/usb /proc/bus/usb usbfs rw,relatime │ └─/proc/sys/fs/binfmt_misc binfmt_misc rw,relatime ├─/sys sysfs sysfs rw,relatime ├─/dev devtmpfs devtmpfs rw,relatime,size=487784k,nr_inodes=121946,mode=755 │ ├─/dev/pts devpts devpts rw,relatime,gid=5,mode=620,ptmxmode=000 │ └─/dev/shm tmpfs tmpfs rw,relatime ├─/boot /dev/sda1 ext4 rw,relatime,barrier=1,data=ordered ├─/usr /dev/mapper/vg0-usr ext4 rw,relatime,barrier=1,data=ordered ├─/var /dev/mapper/vg0-var ext4 rw,relatime,barrier=1,data=ordered ├─/misc /etc/auto.misc autofs rw,relatime,fd=7,pgrp=1872,timeout=300,minproto=5,maxproto=5,indirect ├─/net -hosts autofs rw,relatime,fd=13,pgrp=1872,timeout=300,minproto=5,maxproto=5,indirect └─/testdir /dev/sdb5 ext4 rw,relatime,barrier=1,data=ordered
查看正在訪問指定文件系統的進程:
#lsofMOUNT_POINT
#fuser -v MOUNT_POINT
終止所有在正訪問指定的文件系統的進程:
# fuser -km MOUNT_POINT
卸載:
# umountDEVICE
# umountMOUNT_POINT
謝謝瀏覽…..
原創文章,作者:我的滑板鞋,如若轉載,請注明出處:http://www.www58058.com/40514
文章結構清晰,思路完整,圖文并貌,通過理論結合實踐對所學知識進行了很好的整理和練習,建議將練習過程總遇到的問題羅列出來,通過自己的獨立思考,將其總結成自己的經驗。