磁盤管理磁盤管理
本章內容
?磁盤結構
?分區類型
?管理分區
?管理文件系統
?掛載設備
?管理虛擬內存
設備文件
?I/O Ports: I/O設備地址
?一切皆文件:
open(), read(), write(), close()
?設備類型:
塊設備:block,存取單位“塊”,磁盤
字符設備:char,存取單位“字符”,鍵盤
?設備文件:關聯至一個設備驅動程序,進而能夠跟與之對應硬件設備進行通信
?設備號碼:
主設備號:major number, 標識設備類型
次設備號:minor number, 標識同一類型下的不同設備
硬盤接口類型
?并行:
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:磁頭
?track:磁道
?cylinder: 柱面
?secotr: 扇區,512bytes
使用分區空間
?設備識別
?設備分區
?創建文件系統
?標記文件系統
?在/etc/fstab文件中創建條目
?掛載新的文件系統
磁盤分區
?為什么是分區?
?優化I/O性能
?實現磁盤空間配額限制
?提高修復速度
?隔離系統和程序
?安裝多個OS
分區
?兩種分區方式:MBR,GPT
?MBR: Master Boot Record,1982年,使用32位表示扇區數,分區不超過2T
?如何分區:按柱面
?0磁道0扇區:512bytes
446bytes: boot loader
64bytes:分區表
16bytes: 標識一個分區
2bytes: 55AA
?4個主分區;3主分區+1擴展(N個邏輯分區)
MBR分區結構
GPT分區
?GPT:GUID patition table 支持128個分區,使用64位,支持8Z(512Byte/block )64Z (4096Byte/block)
?使用128位UUID 表示磁盤和分區GPT分區表自動備份在頭和尾兩份,并有CRC校驗位
?UEFI (統一擴展固件接口)硬件支持GPT
GPT分區結構
EFI部分又可以分為4個區域:EFI信息區(GPT頭)、分區表、GPT分區、備份區域
列出可用的磁盤設備
?圖形化磁盤管理功能工具:點擊“應用程序”->“系統工具”->“磁盤”或執行命令gnome-disks
管理分區
?列出塊設備
blkid
?創建分區使用:
?fdisk創建MBR分區,也支持GPT,對于一塊硬盤,最多只能管理15分區
?gdisk創建GPT分區
?GNU parted高級分區操作(創建、復制、調整大小等等)
?partprobe-重新設置內存中的內核分區表版本
?fdisk /dev/sdb
?gfisk /dev/sdb
?# fdisk -l [-u] [device…]
?子命令:
?p 分區列表
?t 更改分區類型
?n 創建新分區
?d 刪除分區
?w 保存并退出
?q 不保存并退出
分區工具fdisk和gdisk
同步分區表
?查看內核是否已經識別新的分區:
# cat /proc/partations
?通知內核重新讀取硬盤分區表
新增分區用
partx-a -n M:N /dev/DEVICE
kpartx-a /dev/DEVICE -f: force
刪除分區用
partx-d -n M:N /dev/DEVICE
centos6: –nrN-M
?CentOS 5,7: 使用partprobe
?partprobe[/dev/DEVICE]
parted命令
?parted的操作都是實時生效的,小心使用
?用法:parted [選項]… [設備[命令[參數]…]…]
parted /dev/sdbmklabelgpt|msdos
parted /dev/sdbprint
parted /dev/sdbmkpartprimary 1 200
parted /dev/sdbrm1
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
?集群文件系統: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
?查前支持的文件系統:cat /proc/filesystems
文件系統選擇
創建文件系統
?mkfs命令:
(1) # mkfs.FS_TYPE/dev/DEVICE
ext4
xfs
btrfs
vfat
(2) # mkfs-t FS_TYPE /dev/DEVICE
-L 'LABEL': 設定卷標
創建ext文件系統
?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:關閉指定特性
文件系統標簽
?指向設備的另一種方法
?與設備無關
?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
?tune2fs:重新設定ext系列文件系統可調整參數的值
-l:查看指定文件系統超級塊信息;super block
-L 'LABEL':修改卷標
-m #:修預留給管理員的空間百分比
-j: 將ext2升級為ext3
-O: 文件系統屬性啟用或禁用,–O ^has_journal
-o: 調整文件系統的默認掛載選項,–o ^acl
-U UUID: 修改UUID號;
?dumpe2fs:
-h:查看超級塊信息(分組信息),分區用分組管理
文件系統檢測和修復
?常發生于死機或者非正常關機之后
?掛載為文件系統標記為“dirty”
?fsck: File System Check
fsck.FS_TYPE
fsck-t FS_TYPE
-a: 自動修復錯誤
-r: 交互式修復錯誤
?注意: FS_TYPE一定要與分區上已經文件類型相同;
?e2fsck:ext系列文件專用的檢測修復工具
-y:自動回答為yes
-f:強制修復
掛載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: 綁定目錄到另一個目錄上
?查看內核追蹤到的已掛載的所有設備:
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功能
Defaults:相當于rw, suid, dev, exec, auto, nouser, async
卸載命令
?查看掛載情況:
#findmntMOUNT_POINT
?查看正在訪問指定文件系統的進程:
#lsofMOUNT_POINT
#fuser -v MOUNT_POINT
?終止所有在正訪問指定的文件系統的進程:
# fuser -km MOUNT_POINT
?卸載:
# umountDEVICE
# umountMOUNT_POINT
掛載點和/etc/fstab
?配置文件系統體系
?被mount、fsck和其它程序使用
?系統重啟時保留文件系統體系
?可以在設備欄使用文件系統卷標
?使用mount -a 命令掛載/etc/fstab中的所有文件系統
文件掛載配置文件
?/etc/fstab每行定義一個要掛載的文件系統;
?要掛載的設備或偽文件系統
?掛載點
?文件系統類型
?掛載選項
?轉儲頻率
?自檢次序
?要掛載的設備或偽文件系統:
設備文件、LABEL(LABEL="")、UUID(UUID="")、偽文件系統名稱(proc, sysfs)
?掛載選項:defaults
?轉儲頻率:0:不做備份
1:每天轉儲
2:每隔一天轉儲
?自檢次序:0:不自檢
1:首先自檢;一般只有rootfs才用1
處理交換文件和分區
?交換分區是系統RAM的補充
?基本設置包括:
?創建交換分區或者文件
?使用mkswap寫入特殊簽名
?在/etc/fstab文件中添加適當的條目
?使用swapon -a 激活交換空間
掛載交換分區
?啟用:swapon
swapon[OPTION]… [DEVICE]
-a:激活所有的交換分區;
-p PRIORITY:指定優先級
/etc/fstab:pri=value
?禁用:swapoff[OPTION]… [DEVICE]
SWAP的優先級
?用戶可以給某個swap指定一個0到32767的優先級
?如果用戶沒有指定,那么核心會自動給swap指定一個優先級,這個優先級從-1開始,每加入一個新的沒有用戶指定優先級的swap,會給這個優先級減一。
?先添加的swap的缺省優先級比較高,除非用戶自己指定一個優先級,而用戶指定的優先級(是正數)永遠高于核心缺省指定的優先級(是負數)。
?優化性能:分布存放,高性能磁盤存放
移動介質
?掛載(Mounting)意味著使外來的文件系統看起來如同是主目錄樹的一部分。
?訪問前、介質必須被掛載
?摘除時,介質必須被卸載
?按照默認設置,非根用戶只能掛載某些設備(光盤、DVD、軟盤、USB等等)
?掛載點通常在/media 或/mnt下
使用光盤
?在圖形環境下自動啟動掛載/run/media/<user>/<label>
?否則就必須被手工掛載
mount /dev/cdrom/mnt/
?eject命令卸載或彈出磁盤
?創建ISO文件
cp/dev/cdrom/root/centos7.iso
mkisofs -r -o /root/etc.iso /etc
?刻錄光盤
wodim–v –eject centos.iso
掛載USB介質
?被內核探測為SCSI設備
?/dev/sdaX、/dev/sdbX、或類似的設備文件
?在圖形環境中自動掛載
?圖標在[計算機]窗口中創建
?掛載在/run/media/<user>/<label>
?手動掛載
?mount /dev/sdb1 /mnt
常見工具
?內存空間使用狀態:
free [OPTION]
-m: 以MB為單位
-g: 以GB為單位
?文件系統空間占用等信息的查看工具:
df[OPTION]… [FILE]…
-H 1000
-T 文件系統類型
-h: human-readable
-i:inodesinstead of blocks
-P: 以Posix兼容的格式輸出
?查看某目錄總體空間占用狀態:
du [OPTION]… DIR
-h: human-readable
-s: summary
工具dd
?dd命令:convert and copy a file
?用法:
ddif=/PATH/FROM/SRC of=/PATH/TO/DEST
bs=#:block size, 復制單元大小
count=#:復制多少個bs
?of=file寫到所命名的文件而不是到標準輸出
if=file從所命名文件讀取而不是從標準輸入
bs=size指定塊大?。仁鞘莍bs也是obs)
ibs=size一次讀size個byte
obs=size 一次寫size個byte
cbs=size 一次轉化size個byte
skip=blocks從開頭忽略blocks個ibs大小的塊
seek=blocks從開頭忽略blocks個obs大小的塊
count=n只拷貝n個記錄
工具dd
?conv=conversion[,conversion…] 用指定的參數轉換文件。
?轉換參數:
?ascii 轉換EBCDIC 為ASCII。
?ebcdic 轉換ASCII 為EBCDIC。
?block 轉換為長度為cbs 的記錄,不足部分用空格填充。
?unblock 替代cbs長度的每一行尾的空格為新行。
?lcase 把大寫字符轉換為小寫字符。
?ucase 把小寫字符轉換為大寫字符。
?swab 交換輸入的每對字節。
?noerror 出錯時不停止。
?notrunc 不截短輸出文件。
?sync 把每個輸入塊填充到ibs個字節,不足部分用空(NUL)字符補齊
工具dd
?磁盤拷貝:
ddif=/dev/sdaof=/dev/sdb
?備份MBR:
ddif=/dev/sdaof=/tmp/mbr.bakbs=512 count=1
?破壞MBR中的bootloader:
ddif=/dev/zero of=/dev/sdabs=64 count=1 seek=446
?有二進制文件fileA,size>2K?,F在想從第64個字節位置開始讀取,需要讀取的大小是128Byts。又有fileB, 想把上面讀取到的128Bytes寫到第32個字節開始的位置,替換128Bytes,請問如何實現?
#ddif=fileAof=fileBbs=1 count=128 skip=63 seek=31 conv=notrunc
工具dd
?備份:
dd if=/dev/sdx of=/dev/sdy
將本地的/dev/sdx整盤備份到/dev/sdy
dd if=/dev/sdx of=/path/to/image
將/dev/sdx全盤數據備份到指定路徑的image文件
dd if=/dev/sdx | gzip >/path/to/image.gz
備份/dev/sdx全盤數據,并利用gzip工具進行壓縮,保存到指定路徑
?恢復:
dd if=/path/to/image of=/dev/sdx
將備份文件恢復到指定盤
gzip -dc /path/to/image.gz | dd of=/dev/sdx
將壓縮的備份文件恢復到指定盤
工具dd
?拷貝內存資料到硬盤
dd if=/dev/mem of=/root/mem.bin bs=1024
將內存里的數據拷貝到root目錄下的mem.bin文件
?從光盤拷貝iso鏡像
dd if=/dev/cdrom of=/root/cd.iso
拷貝光盤數據到root文件夾下,并保存為cd.iso文件
?銷毀磁盤數據
dd if=/dev/urandom of=/dev/sda1
利用隨機的數據填充硬盤,在某些必要的場合可以用來銷毀數據。執行此操作以后,/dev/sda1將無法掛載,創建和拷貝操作無法執行。
48
工具dd
?得到最恰當的block size
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
通過比較dd指令輸出中所顯示的命令執行時間,即可確定系統最佳的block size大小
工具dd
?測試硬盤讀寫速度
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
通過上兩個命令輸出的執行時間,可以計算出測試硬盤的讀/寫速度
工具dd
?修復硬盤
dd if=/dev/sda of=/dev/sda
當硬盤較長時間(比如1,2年)放置不使用后,磁盤上會產生消磁點。當磁頭讀到這些區域時會遇到困難,并可能導致I/O錯誤。當這種情況影響到硬盤的第一個扇區時,可能導致硬盤報廢。上邊的命令有可能使這些數據起死回生。且這個過程是安全,高效的。
原創文章,作者:Nicolas ZhaoIV,如若轉載,請注明出處:http://www.www58058.com/39378
文章對各知識點總結的很詳盡,對一些專業術語自己可以查找資料進行解釋,最后可以從頭到尾梳理一遍,從新增磁盤,分區,格式化,并掛載使用,這樣會讓自己的博客更加充實哦