linux磁盤、文件系統管理
硬盤:機械硬盤、固態硬盤
計算硬盤速度:IoPs:(Io per second ) 每秒20次
機械硬盤:
track:磁道
平均尋道時間
5400rpm 每分鐘5400轉,(一般筆記本)
10000/15000 臺式電腦
sector:扇區(一個扇區512byte,)
cylinder:柱面(一塊彈片上的上下兩面的同一個磁道)
不同彈面上的同一個編號的叫柱面,分區劃分是給予柱面的
1.為什么要分區?
因為硬盤很大,為了使得一個硬盤中可以組織為多個可獨立管理的文件系統,所以要分區,每一個被劃分出來的分區是獨立的塊設備。
設備分兩類:
隨機訪問設備:
塊設備:Block,存取單位是“塊”,如硬盤
線性訪問設備:
字符設備:“char”,存取單位是“字符”,如鍵盤
每一個設備都有一個文件作為它的訪問入口,此文件我們稱之為設備文件,該文件關聯至一個設備驅動程序,進而能夠與之對應的硬件設備通信
每一個硬件設備在內核集中都是靠一個設備號來進行標識的
設備號:用來標識設備,不同類別的設備各有不同的設備號,同一類別的設備有不同設備或多個設備,因此就有主設備號和次設備號
主設備號:major:用來識別設備類型
次設備號:minor:用來識別同一類型下的不同設備
MBR(Master Boot Record):主引導記錄
在硬盤上有一個0磁道0扇區是被預留出來的,他不屬于任何分區,這個扇區稱之為MBR,嚴格意義上講應該叫做用來存儲MBR的一段空間,
0磁道0扇區:
該扇區的大小為512bytes,專門用來存儲MBR(Master Boot Record)主引導記錄,MBR又分為三部分
第一部分:446個字節:存儲boot loader,引導加載器
第二部分:64bytes:存儲分區表:有多少多少個分區,每個分區從哪里開始到哪里結束;其中每16個字節表示一個分區,因此64除16等于4,so,一塊設備最多只能有4個主分區;
第三部分:2bytes:前面信息的有效性標識(結束標志),用4個16進制數來表示55AA,表示前面510bytes是有效的。
如果一塊硬盤需要劃分超過4個分區,則需要其中16個字節的主分區劃分為擴展分區,擴展分區中可以劃分無數個邏輯分區(當然也得硬盤大小決定)
注意:當磁盤容量超過2T的時候,MBR機制不能識別到2T以上的磁盤空間,此時需要用到GPT機制來進行分區
文件系統管理
重新創建文件系統會損壞原有文件
分區管理:
fisk命令:管理MBR(Master Boot Record)磁盤分區表
fdisk提供了一個交互式接口來管理分區,他有許多子命令,分別用于不同的管理功能,所有操作都是在內存中完成,沒有直接同步到磁盤,如果分區完成,輸出w命令保存退出后才寫到磁盤并生效。
類型:分區所在場景類型(使用·fdisk /dev/磁盤· 使用l命令即可查看所有id對應分區類型)
正常分區:83
擴展分區:5
交換分區:82
Device Boot Start End Blocks Id System /dev/sdb1 * 1 26 204800 83 Linux /dev/sdb2 26 7859 62914560 8e Linux LVM
注:centos6上“start”字段和“End”字段表示的是此分區的大小是按照柱面的單位劃分大小(表示開始柱面和結束柱面)
centos7上“start”字段和“End”字段表示的是此分區的大小是按照扇區的單位劃分大小(表示開始扇區和結束扇區)
1.查看分區情況:
fdisk -l[u] [device]
列出指定磁盤設備的分區情況
(1)#fdisk -l 列出所有分區設備
(2)#fdisk -l /dev/sda 列出sda磁盤的分區情況
root@localhost mntsdb]# fdisk -l /dev/sda Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000682bf Device Boot Start End Blocks Id System /dev/sdb1 * 1 26 204800 83 Linux Partition 1 does not end on cylinder boundary. /dev/sdb2 26 7859 62914560 8e Linux LVM
2.管理分區
fdisk [u] [device]
#fdisk -u /dev/sda //進入fdisk配置分區界面,選項”u“可不用寫。
[root@localhost mntsdb]# fdisk -u /dev/sdb WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c'). Command (m for help): 在此鍵入命令,可用m查看命令
進入配置交互式界面常用命令:
n:創建新分區
d:刪除指定已有的分區
t:修改分區類型
l:查看所有id對應分區類型,
p:列出已有分區
w:保存退出
q:不保存退出
m:幫助 (列出所有交互命令)
n:創建新分區
Command (m for help): n //新建分區,n命令 Command action //列出當前可創建的分區 e extended //擴展分區 p primary partition (1-4 ) //主分區 p //輸入p命令,創建主分區 Partition number (1-4): 1 //主分區號1 First cylinder (1-2610, default 1): //分區開始柱面(centos6是以柱面為單位劃分分區大小) Using default value 1 //直接回車從第一個開始 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +1G //大小為1G,指定分區大小有三種方法(1、輸出最后柱面,表示從開始柱面到結束柱面大小2、+柱面,表示從開始柱面到指定的柱面,如+100,表示在第一個柱面的基礎上增加100個柱面,3、直接輸出分區大小,單位K/M/G ) Command (m for help): p //查看當前分區信息 一下為當前磁盤的描述信息,總大小為21.5GB,255個磁頭,63個扇區為一個磁道,2610個柱面等等 ##################################### #Disk /dev/sdc: 21.5 GB, 21474836480 bytes #255 heads, 63 sectors/track, 2610 cylinders #Units = cylinders of 16065 * 512 = 8225280 bytes #Sector size (logical/physical): 512 bytes / 512 bytes #I/O size (minimum/optimal): 512 bytes / 512 bytes #Disk identifier: 0x4d566b71 ##################################### Device Boot Start End Blocks Id System /dev/sdc1 1 132 1060258+ 83 Linux
d:刪除指定已有的分區
Command (m for help): p Device Boot Start End Blocks Id System /dev/sdc1 1 132 1060258+ 83 Linux /dev/sdc2 133 264 1060290 83 Linux /dev/sdc3 265 396 1060290 83 Linux Command (m for help): d Partition number (1-4): 1 Command (m for help): p Device Boot Start End Blocks Id System /dev/sdc2 133 264 1060290 83 Linux /dev/sdc3 265 396 1060290 83 Linux
t:修改分區類型
Device Boot Start End Blocks Id System /dev/sdc1 1 132 1060258+ 83 Linux /dev/sdc2 133 264 1060290 83 Linux /dev/sdc3 265 396 1060290 83 Linux Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): 82 //可使用大寫L查看分區id號對應的分區類型 Changed system type of partition 2 to 82 (Linux swap / Solaris)
l:查看所有id對應分區類型,
Command (m for help): l 0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris 1 FAT12 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT- 2 XENIX root 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT- ...........................
p:列出已有分區
Command (m for help): p .......... Device Boot Start End Blocks Id System /dev/sdc1 1 132 1060258+ 83 Linux /dev/sdc2 133 264 1060290 82 Linux swap / Solaris /dev/sdc3 265 396 1060290 83 Linux
w:保存退出
Command (m for help): w
q:不保存退出
Command (m for help): q
m:幫助 (列出所有交互命令)
Command (m for help): m Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only)
注:在已有分區并且已經掛載中的分區所在的磁盤上創建的新分區,內核可能在創建完成后無法直接識別
查看磁盤生效的所有分區三種方法:
1、cat /proc/partitions
2、lsblk
//不加參數列出所有分區信息,后面可跟參數(如:lsblk /dev/sda ,只列出sda磁盤的分區信息)
3、ls /dev/sd* //因為現在的操作系統所有磁盤都是以sd開頭命令
通知內核強制重讀磁盤分區表:
centos6/7:partx -a [device] 同步指定的磁盤指定分區信息
-d:同步刪除的分區信息,強讀磁盤的分區信息
–nr: 同步磁盤的指定范圍的分區信息,一般組合d使用
kpartx -af [device] 同步指定的磁盤所有分區信息
[root@localhost mntsdb]# partx -a /dev/sdc BLKPG: Device or resource busy error adding partition 1 BLKPG: Device or resource busy error adding partition 2 BLKPG: Device or resource busy error adding partition 3 [root@localhost mntsdb]# kpartx -af /dev/sdc
注:parted 默認創建的是GPT類型的分區,fdisk創建的是MBR類型的分區
創建文件系統:
格式化分為兩類:
低級格式化:(分區之前進行,劃分磁道)
高級格式化:(分區之后進行,創建文件系統)
創建文件系統是劃分分區的元數據區和數據區
元數據區:
文件的元數據(inode)
大小、權限、屬組、屬主、時間戳、數據塊指針
VFS:virtual file system 虛擬文件系統
linux的文件系統:ext2/ext3/ext4/xfs/vfat/reiserfs/btrfs 光盤的文件系統:iso9660 網絡文件系統:gfs2、ocfs2 交換文件系統:swap 偽文件系統:proc、sysfs、tmpfs unix文件系統:ufs、ffs、jfs(有日志)
注:linux的文件系統又以有無日志功能分類:其中:有日志的文件系統(ext3、ext4、xfs)無日志的文件系統(ext2、vfat)
文件系統管理工具分類:
1、創建文件系統的工具 mkfs、mke2fs(ext系列文件系統管理工具) 2、檢測及修復文件系統的工具 fsck 3、查看文件系統屬性的工具 dumpe2fs、tune2fs 4、調整文件系統特性的工具 tune2fs
1、創建文件系統:mkfs
mkfs -t ext2 /dev/sda1 //創建文件系統 mkfs -t ext2 = mkfs.ext2
2、專門管理ext系列文件:mke2fs
mke2fs [option] device -t :指明要創建的文件系統 -j: 創建ext3類型文件系統 -b BLOCK_SIZE: 指定塊大小,默認為4096;可用取值為1024、2048或4096; -L LABEL:指定分區卷標; -m #: 指定預留給超級用戶的塊數百分比 -i #: 用于指定為多少字節的空間創建一個inode,默認為8192;這里給出的數值應該為塊大小的2^n倍; -N #: 為數據空間創建多少個inode個數;
-t :指明要創建的文件系統
[root@localhost mntsdb]# mke2fs -t etx4 /dev/sdb2 [root@localhost mntsdb]# blkid /dev/sdb2 /dev/sdb2: UUID="c4359ac0-e295-48a8-bc78-916bfc644fbb" TYPE="ext2" 注:mke2fs -t etx4 /dev/sdb2 == mkfs.ext4 /dev/sdb2 == mkfs -t ext4 /dev/sdb2
-j: 創建ext3類型文件系統
[root@localhost ~]# mke2fs -j /dev/sdc1 ....... [root@localhost ~]# blkid /dev/sdc1 /dev/sdc1: UUID="03cb5410-c543-4d37-8857-3fa531c23718" SEC_TYPE="ext2" TYPE="ext3"
-b BLOCK_SIZE: 指定塊大小,默認為4096;可用取值為1024、2048或4096;(只能用這是三個值)
[root@localhost ~]# mke2fs -b 2048 /dev/sdc2 .......... [root@localhost ~]# tune2fs -l /dev/sdc2 tune2fs 1.41.12 (17-May-2010) ....... First block: 0 Block size: 2048 //tune2fs ...... 注:塊大小決定文件的尋址范圍 塊大小 直接尋址 間接尋址 二次間接尋址 三次間接尋址 1024 12KB 268KB 64.26MB 16.06GB 2048 24KB 1.02MB 513.02MB 265.5GB 4096 48KB 4.04MB 4GB~ 4TB
-L LABEL:指定分區卷標;
[root@localhost ~]# mke2fs -L "hello sdc3" /dev/sdc3 mke2fs 1.41.12 (17-May-2010) Filesystem label=hello sdc3 ....... [root@localhost ~]# blkid /dev/sdc3 /dev/sdc3: LABEL="hello sdc3" UUID="624cbf32-9331-4703-b787-65f1d1a471c4" TYPE="ext2"
-m #: 指定預留給超級用戶的塊數百分比
為超級用戶保留的塊的比例。為了防止所有的塊都被用光,某些情況下啟動不起來,必須要為超級用戶保留一定比例的塊,這個值默認是5%
[root@localhost ~]# mke2fs -m 10 /dev/sdc4 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 850304 inodes, 3397747 blocks 339774 blocks (10.00%) reserved for the super user //安裝過程中提示出來的信息,預留10%給超級用戶 [root@localhost ~]# tune2fs -l /dev/sdc4 //使用查看ext系列文件系統信息 ....... Reserved block count: 339774 //此為預留的超級塊信息 .........
-i #: 用于指定為多少字節的空間創建一個inode,默認為8192;這里給出的數值應該為塊大小的2^n倍
這個參數的含義是多少個字節分配一個inode。這個參數反映的是,我們對儲存在我們文件系統上的每個文件大小的期許。換句話說,我們期待,每個文件都是4096個字節左右,每個文件需要一個inode。所以我們一共需要500M/4096=12800個inode。
舉例說明,如果我打算在我這個ext2存儲的文件都很小,比如說大多數文件都小于1K。那么如果這個-i的值為8192的話,就會出現下面的情況:總共有512000個塊卻只有64008個inode。 如果你還沒體會到我的意思,那么看Group 0 ,1000個左右的free inode,但是有近8000個free block 。根據我的設定,我的文件大多數比較小,那么,當我的文件個數達到1000個時 free inode先用完了,Group 0 還有近7000個塊空閑。 也就是說選錯了 -i參數使我的inode先用完了。那么就算有大把的free block,你也無法創建文件了。
這個參數的取值范圍是 1024~65536
設定原則為:考慮下你的大多數文件有多大,就設為多大。不設成1024的整數倍也是可以的。
[root@localhost ~]# mke2fs -j -i 2048 /dev/sdc4 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 6795776 inodes, 3397747 blocks
-N #: 指定inode個數;
[root@localhost ~]# mke2fs -N 1000 /dev/sdc4
小例題:在對分區進行創建文件系統時出現提示在運行時,如下類問題時:解決辦法為(先運行:dmsetupstatus,觀看提示結果,再運行 dmsetup remove_all,再次運行:dmsetup status 查看結果與之前有什么不同,此時再創建文件系統就沒問題了
[root@localhost ~]# mkfs.ext4 /dev/sdc1 mke2fs 1.41.12 (17-May-2010) /dev/sdc1 is apparently in use by the system; will not make a filesystem here [root@localhost ~]#dmsetup status [root@localhost ~]#dmsetup remove_all [root@localhost ~]#dmsetup status
tune2fs: 查看或修改ext系列的文件系統的相關屬性
注意:塊大小創建后不能修改
-j: 不損害原有數據,將ext2升級為ext3;
[root@localhost ~]# blkid /dev/sdc4: UUID="ae221423-d29a-4d23-918c-6c2e22e969d3" TYPE="ext2" [root@localhost ~]# tune2fs -j /dev/sdc4 /dev/sdc4: UUID="ae221423-d29a-4d23-918c-6c2e22e969d3" SEC_TYPE="ext2" TYPE="ext3"
-L LABEL: 設定或修改卷標;
[root@localhost ~]# blkid /dev/sdc3: LABEL="hello sdc3" UUID="624cbf32-9331-4703-b787-65f1d1a471c4" TYPE="ext2" [root@localhost ~]# tune2fs -L "This is LABEL" /dev/sdc3 [root@localhost ~]# blkid /dev/sdc3: LABEL="This is LABEL" UUID="624cbf32-9331-4703-b787-65f1d1a471c4" TYPE="ext2"
-m #: 調整預留百分比;
#tune2fs -m 10 /dev/sdc4
-r #: 指定預留塊數;
#tune2fs -r 4096 /dev/sda1
-o: 設定默認掛載選項;(對指定的分區設定掛載選項后,掛載此分區的目錄將繼承此功能)
#tune2fs -o acl /dev/sdc1 //設定acl控制。 #tune2fs -o ^acl /dev/sdc2 //關閉acl控制
-c #:指定掛載次數達到#次之后進行自檢,0或-1表關閉此功能;
#tune2fs -c
-i #: 每掛載使用多少天后進行自檢;0或-1表示關閉此功能;
[root@localhost ~]# tune2fs -l /dev/sdc1 ....... Mount count: 0 Maximum mount count: 35 //此分區超過掛載35次就檢查文件系統 Last checked: Mon Jul 25 20:48:14 2016 Check interval: 15552000 (6 months) //此分區超過6個月就檢查文件系統 這兩個條件滿足其中一個就觸發檢查 .......
-l: 顯示超級塊中的信息;
#tune2fs -l /dev/sdc1
blkid: 查詢或查看磁盤設備的相關屬性
blkid device
[root@localhost ~]# blkid /dev/sdc2 /dev/sdc2: UUID="82f6661f-9edc-4a2d-80a2-34e2e701f722" TYPE="ext2"
blkid -U UUID
[root@localhost ~]# blkid -U 82f6661f-9edc-4a2d-80a2-34e2e701f722 /dev/sdc2
blkid -L LABEL
[root@localhost ~]# blkid /dev/sdc3 /dev/sdc3: LABEL="hello world" UUID="624cbf32-9331-4703-b787-65f1d1a471c4" TYPE="ext2" [root@localhost ~]# blkid -L "hello world" /dev/sdc3
e2label: 用于查看或定義卷標
格式:e2label 設備文件 設定卷標
e2label device //查看分區卷標
[root@localhost ~]# e2label /dev/sdc3 hello world
e2label device LABEL 修改指定的分區的卷標,如果原本有則替換
[root@localhost ~]# e2label /dev/sdc4 hello [root@localhost ~]# e2label /dev/sdc4 hello
dumpe2fs: 顯示ext系列文件系統屬性信息
[root@localhost ~]# dumpe2fs /dev/sdc2 //顯示系統屬性信息
-h: 只顯示超級塊中的信息 [root@localhost ~]# dumpe2fs -h /dev/sdc2 dumpe2fs 1.41.12 (17-May-2010) Filesystem volume name: <none> Last mounted on: <not available> Filesystem UUID: 82f6661f-9edc-4a2d-80a2-34e2e701f722 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: (none) Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 983040 Block count: 7855784 Reserved block count: 392789 Free blocks: 7725161 Free inodes: 983029 First block: 0 Block size: 2048 Fragment size: 2048 Reserved GDT blocks: 512 Blocks per group: 16384 Fragments per group: 16384 Inodes per group: 2048 Inode blocks per group: 256 Filesystem created: Mon Jul 25 20:57:37 2016 Last mount time: n/a Last write time: Mon Jul 25 20:57:38 2016 Mount count: 0 Maximum mount count: 27 Last checked: Mon Jul 25 20:57:37 2016 Check interval: 15552000 (6 months) Next check after: Sat Jan 21 20:57:37 2017 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: 083188b6-9e4c-433f-99dd-abe5be0b2b99
fsck: 檢查并修復Linux文件系統(通用所有文件系統)
因進程意外終止或系統崩潰的原因導致寫入操作時非正常終止時,可能會造成文件損壞,此時應該檢測并修復文件西戎,建議離線進行
-t FSTYPE: 指定文件系統類型
-a: 自動修復
-r:交互式修復
e2fsck: 專用于修復ext2/ext3文件系統
e2fsck [options] device
-f: 強制檢查;
[root@localhost ~]# e2fsck -f /dev/sda1
-y:對所有問題自動回答為yes
[root@localhost ~]# e2fsck -y /dev/sdc2 e2fsck 1.41.12 (17-May-2010) The filesystem size (according to the superblock) is 7855784 blocks The physical size of the device is 530145 blocks Either the superblock or the partition table is likely to be corrupt! Abort? ye
原創文章,作者:Lii,如若轉載,請注明出處:http://www.www58058.com/40024