磁盤管理
設備文件
1. I/O ports:I/O設備地址
2. 一切皆文件,open(),read(),write(),close(),對設備的操作也都是通 過這些底層函數進行的進行操作的
設備類型:
1. 塊設備:block 存取單位“塊”磁盤,(數據在磁盤中以塊進行 存儲的,它是零散 的隨機存儲)
2. 字符設備:char 存取單位“字符”,鍵盤
解釋:在/etc/dev 目錄下,用ls -l 顯示該目錄下的詳細信息會看到用b 和c來標識的文件,該文件是字符設備還是塊設備
設備文件:
設備文件關聯至一個設備驅動程序,進而能夠跟與之對應硬件設備進行通信
設備號碼:主設備號 次設備號
主設備號,標識設備類型(比如硬盤,光盤,終端等)
次設備號:標識同一類型下的不同設備(不同分區它的次設備編號也不 同)
/dev/vda 是虛擬磁盤,不是真實的磁盤
如下圖
硬盤接口和類型
并行:
IDE:133MB/s SCSI:640MB/s
串口:
SATA : 6GPs
SAS : 6Gps 注意 這兩個單位是b
USB: 480MB/s 注意 這個單位是B
思考:為什么串口的速度會那個快,并發接口每個針腳之間存在磁干擾, 并且沒有錯誤修復,如果出現錯誤,會反復進行重傳,這樣它比串口的速度就會慢很多
rpm:在硬盤中指的是轉速每分鐘,rotations per minute
設備文件
磁盤設備的設備文件命名:/dev/DEV_FILE
IDE: /dev/hd(而在os7上這種接口的命令已經統一改為/dev/sd)
SCSI, SATA, SAS, USB: /dev/sd
不同設備:再用a-z字母進行區分/dev/sda/dev/sdb /dev/sdc/。如 果26個字符還不夠 標識的話,那么就用/dev/sdaa /dev/sdab ……進行標識
同一設備上的不同分區:可以用數字進行表示1、2、2…..
/dev/sda1, /dev/sda5
磁盤存儲術語
head :磁頭 256個磁頭
track :磁道 1024 個磁道
cylinder: 柱面 1024
secotr: 扇區,512bytes 63個扇區
總的容量為:512*63*1024*256
扇區*扇區個數*磁道數*磁頭(或者盤面)
磁盤的結構:
磁盤 、 磁臂 、磁頭、 扇區 、 磁道 、電機、盤片
遵循CHS標準,及柱面,磁頭,扇區,磁盤管理的三圍
用fdisk -l 來顯示
早其的時候是以整個柱面進行劃分的,同一個柱面不能相互被兩個分區占用,
一個柱面是8兆,所以分區大小應該是8兆的整數倍
而在os7上是以扇區進行定義分區大小的
顯示磁盤大小 df -h命令
fdisk是一個磁盤的管理工具
如果想讓os7顯示以柱面為分區單位那么就得用
fdisk -l -u=cylinders
磁盤分區:
為什么要分區?
優化I/O 性能 如:對文件進行操作時無需對整個磁盤進行操作,而是針對某個磁盤。
實現磁盤空間配額限制 如:可以限制磁盤空間
隔離系統和程序 如:/boot分區
安裝多個OS 如:一塊硬盤上可以格式話成多個文件系統
提高修復速度 如:果某個磁盤某個位置有問題,不需要進行全 盤進行搜素修復,而是針對某個分區進行修復
分區
分區的方式有兩種:MBR GPT
MBR:主引導記錄master boot record 使用32位表示扇區數量,因 為2的32次方為4G 而一個扇區的大小是512個字節,所以總大小為2T
通常是柱面進行分區的
0磁道0扇區:512字節
前446位:是與系統加載有關
系統加載
還有更早的lilo 只是引導機器
os6的有grub
os7而現在普遍用的grub2,還可以做一些加密和修復功能
64字節:分區表
用16字節標識一個分區:因此只能表示4個分區
用來標識磁盤從第幾個柱面開始,到第幾個柱面結束來表示一個分區
最后兩位:標識位55AA
如果沒有這個55AA的標志位,會表示這個磁盤上沒有分區表,表示為一個裸盤,同時也是一個分區表的結束標識位
4個主分區 或者3個主分區和一個擴展分區+邏輯分區,其中邏輯分 區可以有多個
MBR硬盤分區結構圖
其中分區表中16字節
第一字節 引導標志80表示活動分區,活動區域表示引導操作系統00表示非活動區域
第二字節 表示磁頭號
第三字節和第四字節 第三字節低6為表示的是扇區號高兩位和第四位表示的是柱面編號分區開始點
第五位 分區類型,0表示未使用分區
第六位 磁頭號
第七字節和第八字節 第七位低6位表示扇區,高2位和第八個字節表示柱面號,
后四個字節表示分區開始LBA,就是把前面的
最后四字節表示分區結束LBA 邏輯尋址方式,是把chs模式轉變成線性一維尋址方式
擴展分區
擴展分區0號扇區
擴展分區(446字節)全為零
分區表項同邏輯分區一樣
但是每個邏輯分區前面都有一個零扇區
中間的那個提示表示的是分區一,沒有以一個完整的柱面作為一個整分區
如果不想看那個信息可以用
fdisk -lc
linux中也支持以扇區為表示的顯示分區信息
fdisk -lcu
如何產看磁盤的分區表的二進制呢?
hexdump -C -n 512 /dev/sda
備份分區表,但不是備份硬盤數據,備份的只是分區表
用dd if=/dev/sda of=/root/mbr bs=1 count=512
恢復分區表
dd if=/root/mbr of=/dev/sdb
注意擴展分區里面的邏輯分區備份不回來的,因為擴展分區中邏輯分區是保存在零扇區的,而不是硬盤的零扇區,邏輯分區不在mbr中存儲
dd if=/dev/zero of=/dev/sdb bs=1 count=446
如何生效剛加入的硬盤,
1重啟
2.用命令:echo “– – –”>/sys/class/scsi_host/host2/scan
注意兩個橫線直接是有空格的
GRT分區
支持128個分區,使用64位支持8Z(512byte/block)和64Z
使用128為UUiD表示磁盤和分區GPT
分區表自動備份在頭和尾兩份,并沒有CRC校驗位
UEFI(統一擴展固件接口)硬件支持GPT是操作系統使操作系統啟動
如果不用GPT做引導,只是存數據,這樣有沒有有硬件支持都無所謂
LBA0內是存放偽MBR,及protection MBR、
因為很多分區工具只識別MBR分區方式,如果沒有這個分區表會以為這是一個裸磁盤,這時候系統會提示設備為空,其實里面可能是有數據的,這樣可能會造成數據的丟失
保護MBR的作用就是提示,就是提示上面有分區,不要輕易分區
防止老的分區工具破壞gpt分區
前面是分區表,后面是分區,最后面是備份分區表
列出塊設備:lsblk
創建分區使用
fdisk創建MBR分區,也支持GPT,對于一塊硬盤,最多只能管理15個分區
gdisk創建GPT分區
parted 高級分區操作(創建、復制、調整大小等等)他是非交互的因次操作比較危險慎用
partprobe 同步置內存分區表
查看分區的三種方式
第一種:lsblk
第二種:ll /dev/sd*
第三種:cat /proc/partitions
查看正在生效的設備,所謂生效就是加載到內存中
fdisk其實也能管理gpt格式的分區但是不長用,也不推薦用
要管理gpt有一個專門的工具進行管理gdisk
用fdisk分區時一定注意是對磁盤進行分區,而不是對分區進行分區
fdisk /dev/sdb
而不是 對分區進行進行分區,當然對分區進行在分區也不是是不可以只是不能分,這是會顯示一個p的標識表示里面一個分區
在查看分區表中顯示的塊大小是以1k為大小的
解決添加分區后沒有同步的問題
partx -a /dev/sda
partprobe 只有os6上不會生效
刪除分區同步
partx -d –nr 7-8 /dev/sda n是分區號
查看正在生效的設備,所謂生效就是加載到內存中
fdisk其實也能管理gpt格式的分區但是不長用,也不推薦用
要管理gpt有一個專門的工具進行管理gdisk
用fdisk分區時一定注意是對磁盤進行分區,而不是對分區進行分區
fdisk /dev/sdb
而不是 對分區進行進行分區,當然對分區進行在分區也不是是不可以只是不能分,這是會顯示一個p的標識表示里面一個分區
在查看分區表中顯示的塊大小是以1k為大小的
解決添加分區后沒有同步的問題
partx -a /dev/sda
partprobe 只有os6上不會生效
刪除分區同步
partx -d –nr 7-8 /dev/sda n是分區號
parted 的操作都是實時生效的,小心使用
v 用法:parted [ 選項]… [備 設備 [令 命令 [ 參數]…]…]
parted /dev/sdb mklabel gpt|msdos 創建gpt方式或是mbr方式分區
parted /dev/sdb print 打印分區列表
parted /dev/sdb mkpart primary 1 200 創建分區,
parted /dev/sdb rm 1 刪除分區
parted -l
文件系統
文件系統:是操作系統用于明確存儲設備或分區上的文件的方
法和數據結構;即在存儲設備上組織文件的方法。操作系統
中負責管理和存儲文件信息的軟件結構稱為文件管理系統,
簡稱文件系統。
從系統角度來看,文件系統是對文件存儲設備的空間進行組
織和分配,負責文件存儲并對存入的文件進行保護和檢索的
系統。具體地說,它負責為用戶建立文件,存入、讀出、修
改、轉儲文件,控制文件的存取,安全控制,日志,壓縮,
加密等
文件系統類型 Linux 文件系統: ext2, ext3, ext4, xfs (SGI ), btrfs( Oracle ), reiserfs, jfs (AIX ), swap
swap: 交換分區
光盤:iso9660
Windows :fat32, ntfs
Unix: FFS (fast ), UFS (unix ), JFS2
網絡文件系統:NFS, CIFS(windows的文件共享)
集群文件系統:GFS2, OCFS2 (oracle) )
分布式文件系統:ceph, moosefs, mogilefs, glusterfs,紅帽的數據同步
Lustre
RAW :未經處理或者未經格式化產生的文件系統,分完區,沒有進行任何操作,
文件系統分類
根據其是否支持"journal" 功能:
日志型文件系統: ext3, ext4, xfs, …
非日志型文件系統: ext2, vfat
文件系統的組成部分:
內核中的模塊:ext4, xfs, vfat
用戶空間的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
v Linux 的虛擬文件系統:VFS
查前支持的文件系統:cat /proc/filesystems
用lsmod可以查看系統支持的安裝模塊
上圖的數字表示的引用的次數
查看系統所支持的文件系統
autofs自動掛載,只有一訪問/misc/cd就會觸發這個命令
創建文件系統
mkfs.ext4 /dev/sdb1 一旦創建就會自動創建一個UUID
UUID來唯一標識一個分區標識
查看文件的大小du 命令
ext4文件系統中最小的單位是1k 2k 4k
用命令tune2fs -l /dev/sda |grep size
在一個分區中,通常會有超塊來記錄組的元信息,包括:里面分了幾個組每個組是從第幾個塊到第幾個組結束,塊大小,在格式話的時候超級開的大自動已經完成了備份,
一個組的大小通常是8192
用命令dumpe2fs /dev/sdb1
查看文件類型
blkid
用卷標進行查找blkid -L 卷標名
blkid -U uuid=dedjggj
如何生成隨機生成uuidgen
如何去掉日志功能和添加日志功能
tune2fs -O ^has_journal /dev/sda5
tune2fs -O has_journal /dev/sda5
只有掛載才能查看用df命令查看
mkfs 命令:
(1) # mkfs.FS_TYPE /dev/DEVICE
ext4
xfs
btrfs
vfat
(2) # mkfs -t FS_TYPE /dev/DEVICE
-L 'LABEL': 設定卷標
e2label /dev/sdb1 /mnt/sdb1如果已經格式化了,就用這個進行修改卷標名稱
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
文件系統標簽
tune2fs :重新設定ext 系列文件系統可調整參數的值
-l :查看指定文件系統超級塊信息;super block
-L 'LABEL' :修改卷標
-m # :修預留給管理員的空間百分比
-j: 將ext2 升級為ext3
-O: 文件系統屬性啟用或禁用, –O ^has_journal
-o: 調整文件系統的默認掛載選項,–o ^acl
-U UUID: 修改UUID 號;
v dumpe2fs: :
-h查看超級塊信息(分組信息),分區用分組管理
mount -o acl /dev/sdb /mnt/sdb3 用mount來加載acl
tune2fs -o acl
然后用fsck命令修復
常發生于死機或者非正常關機之后
v 掛載為文件系統標記為“dirty” ”
v fsck: File System Check
fsck.FS_TYPE
fsck -t FS_TYPE
-a: 自動修復錯誤
-r: 交互式修復錯誤
v 注意: FS_TYPE 一定要與分區上已經文件類型相同;
v e2fsck :ext 系列文件專用的檢測修復工具
-y :自動回答為yes
-f :強制修復
掛載mount
掛載: 將額外文件系統與根文件系統某現存的目錄建立起關聯
關系,進而使得此目錄做為其它文件訪問入口的行為
v 卸載:為 為 解除此關聯關系的 過程
v 把設備關聯掛載點:mount Point
mount 卸載時:可使用設備,也可以使用掛載點
umount
v 掛載點下原有文件在掛載完成后會被臨時隱藏
v 掛載點目錄一般為空
用mount 命令掛載文件系統
掛載方法:mount DEVICE MOUNT_POINT
v mount :通過查看/etc/mtab 文件顯示當前已掛載的所有設備
v 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 :指定要掛載的設備上的文件系統類型
v -r: readonly ,只讀掛載
v -w: read and write, 讀寫掛載
v -n: 不更新/etc/mtab ,相當于#mount
v -a :自動掛載所有支持自動掛載的設備( 定義在了/etc/fstab
文件中,且掛載選項中有auto 功能)
v -L 'LABEL': 以卷標指定掛載設備
v -U 'UUID': 以UUID 指定要掛載的設備
v -B, –bind: 綁定目錄到另一個目錄上
v 查看內核追蹤到的已掛載的所有設備:
cat /proc/mounts
mount常用命令選項
-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 功能
v Defaults :相當于rw, suid, dev, exec, auto, nouser, async
卸載命令和/etc/fstab
查看掛載情況:
#findmnt MOUNT_POINT
v 查看正在訪問指定文件系統的進程:
#lsof MOUNT_POINT
#fuser -v MOUNT_POINT
v 終止所有在正訪問指定的文件系統的進程:
# fuser -km MOUNT_POINT
v 卸載:
# umount DEVICE
# umount MOUNT_POINT
配置文件系統體系
v 被 被mount 、fsck 和其它程序使用
v 系統重啟時保留文件系統體系
v 可以在設備欄使用文件系統卷標
v 使用mount -a 命令掛載/etc/fstab 中的所有文件系統
原創文章,作者:yywan1314,如若轉載,請注明出處:http://www.www58058.com/40362
文章對磁盤的基礎知識總結的較為全面,內容完整,但是對于純理論的東西,我們要盡量做到清晰化,也就是說明確定義,并通過查找資料來進行描述,而不是簡單的列一些關鍵字,這是不好的,需要作者多加注意。