Linux下:磁盤管理和文件系統管理
一、 磁盤基礎知識
本章學習之前需要了解以下幾點:
?強調: Linux裏面一切皆文件。
?I/O Ports即I/O設備地址,用來標識硬件對應的設備地址,來讓操作系統以及cpu使用。
?註意: CPU的核數不一定就是越多越好,由於CPU協調之間的問題,性能可能不升反降。
1、 設備文件
①、什麽是設備文件
設備文件會關聯至一個設備驅動,進而能夠跟與之對應的硬件設備進行通信
②、設備文件分類:
?塊設備:block。存取單位"快"。典型代表:磁盤
?字符設備:char,存取單位"字符"。典型代表鍵盤
③、設備文件路徑:
# /dev/dev_file
④、設備號碼標識:
主設備號:major number,標識設備類型
次設備號:minor number,標識同一類設備號下的不同設備
[root@oldboy dev]# ls -l /dev/ | grep "sda" lrwxrwxrwx. 1 root root 4 May 23 16:37 root -> sda3 brw-rw----. 1 root disk 8, 0 May 29 05:40 sda 【註意:這是同一設備類型,所以主設備號都是8,由於是同一設備類型下的不同設備,所以次設備號不同,且sdade的次設備號是0】 brw-rw----. 1 root disk 8, 1 May 23 16:37 sda1 brw-rw----. 1 root disk 8, 2May 23 16:37 sda2 brw-rw----. 1 root disk 8, 3 May 23 16:37 sda3
⑤、硬盤接口類型
接口速率而非硬件設備速率,同一個接口不同的硬盤速率不同
並行(實現數據串行工作,類似雙向兩車道,但是之間有數據幹擾)
IDE:133MB/s
SCSI:640MB/s
串口(實現數據串行工作,類型單向四車道)
SATA3:6Gbps(需要除以8來得到實際速率)
SAS:6Gbps
USB:480MB/s
單位(rpm): rotations per minute
命名格式: /dev/DEV_FILE
不同的主設備命名方法: /dev/sd#
【註意:#代表a-z】
如:
同一主設備不同的分區命名:
【直接使用數字區分】
如:/dev/sda /dev/sda2 /dev/sda2 /dev/sda3
2、機械式硬盤【這一部分寫出來主要是了解作用:要了解什麽是磁道、扇區、柱面】
機械硬盤主要由以下幾部分組成:機械手臂(Boom),磁頭(Head),轉軸(Spindle),盤片(Platter)組成,在實際應用中又將盤片分成了磁道(Track),扇區(Sector)和柱面(Cylinder)
在實際應用中又將盤片分成了磁道(Track),扇區(Sector)和柱面(Cylinder)
3、分區原理知識點 前言:機械式硬盤是按柱面分區的 ①、0磁道0扇區 在傳統的系統上,當我們啟動計算機的時候,默認的最開始會讀取0磁道0扇區的數據,其大小是
512bytes
,
它不屬於任何分區,用來標識我們創建的分區信息等
0磁道0扇區的大小不會算在分區裏面
446bytes: boot loader 主引導記錄
64bytes: 分區表
16bytes: 標識一個分區 【所以一個機械硬盤最多只能夠分4個主分區,或者3個主分區+擴展分區(N個邏輯分區)】
2bytes: 55AA用來標識結尾
實戰演練:(要知道 "dd"命令是幹什麽的)
# 備份MBR dd if=/dev/sda1 of=/root/mbr bs=512 count=1 # 恢復MBR: dd if=/root/mbr of=/dev/sda1 bs=512 count=1 # 恢復分區表: dd if=/root/mbr of=/dev/sda1 bs=512 skip=446 count=66 註:mbr大小512 所以bs=512 count=1 bs=512 skip=446 count=66 用來確定分區表在備份文件中的位置
4、磁盤分區管理工具:【fdisk 、parted 、sfdisk】
本篇文章主要是講解fdisk進行磁盤分區操作
fdisk 管理分區的前提條件:最多只能夠管理15個分區
語法格式2: fdisk [-l, -u] [device]
參數說明:如果不帶參數的話,直接進行分區
-l:顯示當前系統分區情況;後面如果帶了具體的那個分區的話,就顯示那個分區結構
-u:對磁盤進行分區操作
在使用fdisk命令的時候註意:
# fdisk -u /dev/sda 【正確】 # fdisk -u /dev/sda1 【錯誤】
在分區操作上:以下是子命令管理操作
p: print, 顯示已有分區;
n: new, 創建 【在分區的時候註意:因為必須保留1-4這4個數字給主分區和擴展分區使用,所以邏輯分區的數字必須從5開始】 d: delete, 刪除 w: write, 寫入磁盤並退出 q: quit, 放棄更新並退出 m: 獲取幫助 l: 列表所分區id t: 調整分區id分區保存退出之後還要進行以下幾步操作才行
①、查看內核是否已經識別分區命令:
# cat /proc/partaions
②、如果內核沒有識別,則通知內核重新讀取磁盤分區表
方法一:
# partx [-a,-n] /dev/DEVICE
-a:讀取全部全部分區表
-n:讀取指定的分區表
方法二:
#kpartx [-a,-f] /dev/DEVICE
-a:讀取全部全部分區表
-f:強制讀取分區表 【註意:這種方法不建議使用,如果上面的讀取方法不行的話,最後才使用這種方法】
方法三: 【註意:這個方法只適用於centos5.x系列】
# partprobe [/dev/DEVICE]
③、做了上面幾步之後,如果想使用當前分區的磁盤的話,還需要格式化磁盤
案例分析:
[root@oldboy ~]# fdisk -l 【查看當前系統裏面的所有分區情況】
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 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: 0x0006ac8d
Device Boot Start End Blocks Id System
/dev/sda1 * 1 26 204800 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 26 113 694272 82 Linux swap / Solaris
Partition 2 does not end on cylinder boundary.
/dev/sda3 113 1306 9585664 83 Linux
[root@oldboy ~]# fdisk -u /dev/sda 【在磁盤sda上面創建新的分區】
WARNING: DOS-compatible mode is deprecated. It‘s strongly recommended to
switch off the mode (command ‘c‘).
Command (m for help): n
Command action
e extended
p primary partition (1-4)
e 【擴展分區】
Selected partition 4
First sector (63-20971519, default 63):
Using default value 63
Last sector, +sectors or +size{K,M,G} (63-2047, default 2047): 1000
Command (m for help): p 【查看分區信息】
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0006ac8d
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 411647 204800 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 411648 1800191 694272 82 Linux swap / Solaris
Partition 2 does not end on cylinder boundary.
/dev/sda3 1800192 20971519 9585664 83 Linux
/dev/sda4 63 1000 469 5 Extended
Partition 4 does not end on cylinder boundary.
Partition table entries are not in disk order
Command (m for help): w 【保存分區信息並退出】
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
[root@oldboy ~]# cat /proc/partitions 【查看內核是否已經識別了分區,這裏內核沒有識別分區】
major minor #blocks name
8 0 10485760 sda
8 1 204800 sda1
8 2 694272 sda2
8 3 9585664 sda3
[root@oldboy ~]# partx -a /dev/sda 【通知內核重新讀取磁盤分區信息】
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@oldboy ~]# cat /proc/partitions 【再次查看,內核已經識別了分區】
major minor #blocks name
8 0 10485760 sda
8 1 204800 sda1
8 2 694272 sda2
8 3 9585664 sda3
8 4 469 sda4
5、文件系統管理操作
1)文件系統類型介紹:
linux文件系統類型:ext2、ext3、ext4、xfs 【btfrs、reiserfs、jfs、swap(交換分區)、光盤(iso9660)】
swap: 交換分區
windows: fat32 、utfs
unix: FFS、UFS、JFS2
網絡文件系統:NFS、CIFS
集群文件系統:GFS2、OCFS2
分布式文件系統:ceph
根據其是否支持"journal"功能,又分為
日誌文件系統:ext3,ext4,xfs,...
非日子文件系統:ext2,vfat
文件系統的組成部分:
內核中的模塊:ext4, xfs, vfat 用戶空間的管理工具:mkfs.ext4, mkfs.xfs, mkfs.vfat 【其實是一一對應的】Linux的虛擬文件系統:VFS------linux系統上可同時使用多種文件系統類型,最終都統一成VFS來進行管理,
使用cat /proc/filesystems命令來查看系統支持的文件系統類型,
lsmod命令能查看已裝載的模塊
2)創建文件系統(格式化):
mkfs命令:
語法1: mkfs.FS_TYPE /dev/DEVICE
語法2:mkfs -t FS_TYPE /dev/DEVICE [上面一個可以說成是下面這個的簡寫]
FS_TYPE 選項:
ext4、xfs、btrfs、vfat
共同參數:
-L # : 設定卷標名為#
案例詳解:
[root@oldboy ~]# mkfs.ext4 -L "myname" /dev/sda4 【創建文件系統的同時指定卷標】
mke2fs 1.41.12 (17-May-2010)
Filesystem label=myname
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
64 inodes, 468 blocks
23 blocks (4.91%) reserved for the super user
First data block=1
Maximum filesystem blocks=524288
1 block group
8192 blocks per group, 8192 fragments per group
64 inodes per group
Writing inode tables: done
Filesystem too small for a journal
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 29 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@oldboy ~]# blkid /dev/sda4 【查看文件系統類型】
/dev/sda4: LABEL="myname" UUID="0f2e4652-15aa-4589-8c3f-225f73b0c74d" TYPE="ext4"
[root@oldboy ~]#
View Code
3)文件系統專用管理工具:
mke2fs命令 【是ext系列文件系統專用管理工具】
語法:mke2fs [OPTIONS] /dev/DEVICE
參數:
-t: (ext2\ext3\ext4)
-b:指定block大小,不指定的話默認(1024.2048.4096)
-L: 指定卷標
-j: 相當於 -t ext3
-i # : 為數據空間中沒多少個字節創建一個inode;ci大小不應該小雨block大小
-n # : 為數據空間創建多少個inode
-m # : 為管理人員預留的空間占據百分比;默認百分之5的空間
-O FEATURE[,...] : 啟用指定特性
-O ^FEATURE[,...]: 關閉指定特性
舉例:mke2fs -b 2048 -m 3 -L MYDATA /dev/sda4
4)創建交換分區
命令:mkswap
使用命令的前提:必須先調整其分區的ID為82 (使用fdisk 裏面的 "t" 選項實現)
命令格式: mkswap [OPTIONS] ... DEVICE
參數: -L : "LABLE"
5)其他常用工具
blkid命令 :快設備屬性信息查看
語法: blkid [OPTIONS]... [/dev/DEVICE]
參數: -L:根據指定的LABLE來查找對於的設備 -U:根據指定設備的UUID來查找對於的設備【註意:如果前面跟了參數的話,是根據指定參數來查找設備文件,後面路徑不要寫(寫了也沒有用);
如果前面不給參數的話,是查看設備文件的UUID和LABEL等,後面就必須寫上是哪個設備文件】
[root@oldboy ~]# blkid /dev/sda4 【查看設備文件屬性信息】
/dev/sda4: LABEL="lable" UUID="d33ffdae-f171-492e-b3d5-6099dcbe5856" TYPE="ext4"
[root@oldboy ~]# blkid -L lable 【根據設備文件的LABLE,找到該設備文件】
/dev/sda4
[root@oldboy ~]#blkid -U "d33ffdae-f171-492e-b3d5-6099dcbe5856" 【根據設備文件的UUID,找到該設備文件】
Blkid 命令的用法
e2lable命令:管理ext系列文件系統的LABLE
語法: e2lable [LABLE] DEVICE
tune2fs命令:重新設定ext系列文件系統可調整參數的值
參數:
-l:查看文件系統的超級塊信息:super block
-L ‘LABLE‘ : 修改卷標
-j: 將 ext2 升級為ext3 (相當於 "-t ext3")
-m # : 為管理人員預留的空間占據百分比;默認百分之5的空間
-O FEATURE[,...] : 啟用指定特性
-O ^FEATURE[,...] 關閉指定特性
tune2fs -O has_journal /dev/sda5, 會把原先的ext2文件系統改為ext3,
tune2fs -O ^has_journal /dev/sda5 禁用此屬性
-o:調整文件系統的默認掛載選項,用法和上面一樣,關於屬性名可以man tune2fs來查看,
例如tune2fs -o ^acl /dev/sda5 #禁用默認掛載選項的acl功能
-U UUID : 修改UUID號;UUID但是隨機 生成的,要修改的場景不多
dumpe2fs命令
-h: 查看超級快信息
舉例: dumpe2fs /dev/sda4 會詳細的顯示文件系統信息,或者說是布局信息,比如分組情況,塊信息,inode位置等
6)文件系統的檢測工具(常用於異常關機導致文件系統出錯的情況):
註意事項:無論是異常關機還是正常關機,開機時不要進行文件自動檢測,最好是開機後進行文件手動檢測
Linux下:磁盤管理和文件系統管理