Linux運維基礎-磁盤管理

設備文件
一切皆文件:open(),read(),write(),close()
設備類型:
字符文件:char,c,存取單位字符,鍵盤
塊設備:block,b,存取單位塊,磁盤
設備文件:/dev/下關聯至一個設備驅動程序,進而能夠與之對應的硬件設備進行通信
設備號碼:主設備號(標識設備類型),次設備號(標識同一類型下的不同設備)
硬盤接口類型:
並行:IDE,SCSI
串口:SATA,SAS,USB

複製設備文件cp -a
例如:在/data下創建字符設備:mknod /data/zerofile c 1 5
創建10M的test文件:dd if=/data/zero of=test bs=1M count=10
hexdump -C test查看二進制,裏面全是0

CHS 磁盤三維
sector 扇區
head 磁頭 track磁道
cylinder 柱面(柱面數等於磁道數)
6bit sector 8bit head 10bit track
採用24bit位尋址
最大尋址空間8GB

LBA(邏輯塊尋址)
LBA是一個整數,通過轉換成CHS格式完成磁盤具體尋址
LBA採用48個 bit位尋址
最大尋址空間128PB

使用磁盤
1.分區
2.創建文件系統,格式化
3,掛載:分配目錄名

磁盤分區:
爲什麼分區:
優化I/O性能
實現磁盤空間配額限制
提高修復速度
隔離系統和程序(如數據庫數據和日誌分開存放不同分區)
安裝多個OS
採用不同文件系統

兩種分區:MBR ,GPT
MBR(主引導記錄):master Boot Record,32位表示扇區數,分區不超過2T
0磁道0扇區:512bytes
446bytes:boot loader 引導系統使用
64bytes:分區表,16bytes標識一個分區
2bytes:55AA,硬盤分區標識位(hexdump -C /dev/sda -n 512 -v)
4個分區,3個主分區+1個擴展分區(N個邏輯分區)

GPT
GPI:GUID(Globals Unique Identifiers),partition table 支持128個分區,使用64位,支持8Z(512Byte/block)和64Z(4096Byte/block)
使用128位UUID(univeersally Unique Identifier)表示磁盤和分區GPT分區表,自動備份在頭和尾兩份,並有CRC校驗位
UEFI(統一擴展固件接口)硬件支持GPT,使操作系統啓動
磁盤上有文件調用uuid:cat /etc/fstab
圖形界面下直觀查看磁盤管理功能工具:gnome-disk

BIOS+MBR與UEFI+GPT
開機---bios初始化--bios自檢---引導操作系統---進入系統
開機----UEFI初始化----引導操作系統---進入系統

管理分區
列出塊設備:lsblk -f可以列出文件系統類型
創建分區使用:
fdisk創建MBR分區
centos6分邏輯分區應注意縫隙問題,centos6是以柱面爲單位,centos7是以扇區爲單位
gdisk創建GPT分區
parted高級分區操作
echo -e "n\n\n+2G\nw" | fdisk /dev/sda &>/dev/null

partprobe-重新設置內存中的內核分區表版本
centos7同步內存分區表:partprobe
centos6同步內存分區表:partx -a /dev/sda (只適合於新增分區使用)
centos6同步內存刪除分區:partx -d --nr 6-8 /dev/sda(6-8是分區號)

parted高級分區操作(交互式執行),操作都是實時生效,小心使用
parted /dev/sda print顯示磁盤信息
parted /dev/sdb mklabel msdos創建MBR分區
parted /dev/sdb mklabel gpt創建GPT分區
創建分區:parted /dev/sdb mkpart primary 1 1000(以MB爲單位)
查看分區:parted /dev/sdb print 或 parted -l /dev/sdb
刪除分區:parted /dev/sdb rm 1
刪除磁盤上分區操作:dd if=/dev/zero of=/dev/sdb bs=1 count=512
查看確認:hexdump -C /dev/sdb -n 512

fdisk -l是讀取硬盤上的分區表,lsblk是內存中讀取的分區表

備份64字節分區表:dd if=/dev/sdb of=/data/partition bs=1 count64 skip=446
破壞64字節分區表:dd if=/dev/zero of=/dev/sdd bs=1 count=64 seek=446

備份分區表:dd if=/dev/sda of=/data/mbr_bak bs=1 count=512
hexdump -C /data/mbr_bak或者hexdump -C /dev/sda -n512 -v
把文件拷貝到其他地方:scp /data/mbr_bak 192.168.30.233:/data/
破壞分區表:dd if=/dev/zero of=/dev/sda bs=1 count=512
破壞分區表後可以查看:ls /dev/sda*,cat /proc/partitions
破壞最後分區標識位2位:dd if=/dev/zero of=/dev/sdd bs=1 count=2 skip=510 seek=510
跟破壞分區表效果一樣
設備未重啓的情況下:dd if=/data/centos7_mbr_bak of=/dev/sda bs=1 count=512
重啓的話有兩種辦法修復:
一、拆下硬盤到其他設備上修復,恢復分區表
二、進入救援模式恢復:
手動給網卡配地址:ifconfig ens33 192.168.33.6/24

文件系統:

操作系統中負責管理和存儲文件信息的軟件結構稱爲文件管理系統
從系統角度看,文件系統是對文件存儲設備的空間進行組織和分配,負責文件存儲並對存入的文件進行保護和檢索的系統,具體來說,爲用戶建立文件,存入,讀出,修改,轉儲文件,控制文件的存取,安全控制,日誌功能,壓縮,加密等
查看當前系統支持的文件系統:ls /lib/modules/uname -r/kernel/fs
Linux文件系統:ext2(Extended file system),ext3,ext4,xfs(SGI),btrfs(Oracle),reiserfs,jfs(AIX),swap
光盤:iso9960
windows:FAT32,exFAT,NTFS
網絡文件系統:NFS,CIFS
集羣文件系統:GFS2,OCFS2(oracle)
分佈式文件系統:fastdfs,moosefs,mogilefs,Lustre
RAW:未經處理或者未經格式化產生的文件系統

文件系統的分類
根據其是否支持journal功能:
日誌型文件系統:ext3,ext4,xfs...
非日誌型文件系統:ext2,vfat
文件系統的組成部分:
內核中的模塊:ext4,xfs,vfat
通過vfs傳給內核
用戶空間管理工具:mkfs.ext4,mkfs.xfs,mkfs.vfat

free命令裏面的buffers和cached,
buffer(緩衝)一般是內存中做寫緩衝用的,cache是磁盤上讀緩存用的

查看文件系統:
blkid /dev/sdb1
-U uuid,-L 卷標名
通過UUID查對應的分區:
blkid -U cat /etc/fstab|grep -E /data|grep -oE "[a-z0-9-]+"|head -1
blkid -U sed -nr '/data/s@^(.*)=([0-9a-z-]+).*@\2@p' /etc/fstab
df -T查看當前系統用的文件系統,只能顯示已掛載的
創建文件系統自動生成uuid,uuidgen可以生成uuid(128位)
改UUID:tune2fs -U 'uuid= '(或·uuidgen·) /dev/sdb2
建議以後腳本用uuid表示分區

創建文件系統:mkfs.ext4或mkfs -t ext4
-b{ 1024 | 2048 |4096 }指定塊大小
-i #:爲數據空間中每多少字節創建一個inode;此大小不應該小於block的大小
-N #:指定分區中創建多少個inode
-l 一個inode佔用空間大小(123---4096)
-O指定特性
-m #;默認5%爲管理人預留空間佔總空間的百分比,-m 0.1(1/1000)
或mkfs.ext4 /dev/sdb2 -b 1024 -m 0.1
mke2fs /dev/sdb1 創建ext2文件系統或mke2fs -t ext2 | ext3 |ext4 /dev/sdb2創建ext4文件系統
mkfs -t ext4 /dev/sdb1等價於mkfs.ext4 /dev/sdb1
mkfs.ext4 -L /data/mysql /dev/sdb1創建帶/data/mysql標籤的分區
mkfs -t ext4 /dev/sdb1 -b 1024指定文件系統時指定塊大小
mkfs命令會有提示
通過腳本方式創建分區:echo -e "n\np\n\n\n+2G\nw\n" |fdisk dev/sdbc
多行重定向:fdisk -l /dev/sdc<<EOF

tune2fs:重新設定ext系列文件系統可調整參數的值
Centos6查看ext系列文件系統元數據(只能查看ext系列):tune2fs -l /dev/sdb2
-L ‘LABEL’:修改卷標
或e2label修改ext系列卷標:e2label /dev/sb2 /data/mysql 改爲/data/mysql
-O文件系統屬性啓用或禁用,-O ^has_journal
-o調整文件系統的默認掛載選項,-o ^acl
-m #:修改預留給管理員的空間百分比
-U指定UUID:tune2fs -U uuidgen /dev/sdb2
tune2fs -c # /dev/sdb2,更改最大掛載次數觸發fsck
tune2fs -C # /dev/sdb2 ,更改當前掛載次數
Centos6 改變默認掛載選項:tune2fs -o acl /dev/sdb1
Centos6系統默認分區有acl功能,手工創建的沒有
tune2fs -o acl /dev/sdb2 執行後必須取消掛載再重新掛載才能生效,
取消acl:tune2fs -o ^acl /dev/sdb2
或者mount -o acl /dev/sdb1 /data/sdb1
不取消掛載的情況下取消acl:mount -o noacl,remount /dev/sdb1 /data/sdb1
Centos7文件系統默認都有acl功能
findfs:查找分區
查找已知UUID對應的設備:
findfs UUID=8e8e4838-15c0-400d-8349-e203659c41c5
blkid -U 8e8e4838-15c0-400d-8349-e203659c41c5

Centos6查看塊設備(超級塊):dumpe2fs /dev/sda1,適合ext系列,0-10的奇數塊有備份塊
Centos7查看塊設備:xfs_info /dev/sda1
分頁顯示塊信息:dumpe2fs /dev/sdb2 |less
dumpe2fs -h /dev/sdb2

修復文件系統
fsck可以修復文件系統-a 自動修復,-r交互式修復,實際是調用e2fsck
clean表示文件系統正常,noclean文件系統有問題

破壞性操作:dd if=/dev/zero of=/dev/sdb1 bs=1M count=20
tune2fs -l /dev/sdb2查看情況,
修復分區一定要確保文件系統未處於掛載狀態,fsck和e2fsck是ext文件系統修復,
xfs文件系統修復用fsck也行,會自動調用xfs_repair命令
fsck /dev/sdb1 -y可以修復文件系統損壞
e2fsck /dev/sdb1 -f強制修復

掛載mount
把設備關聯到文件夾上才能使用
一個掛載點(目錄)同個時間點只能掛載一個設備
一個分區可以掛載多個文件夾目錄,看到的東西是一樣的,避免循環掛載
掛載點文件夾最好是空文件夾,否則之前的文件則無法訪問,造成垃圾文件
掛載點目錄必須存在,掛載可以寫設備名,也可以寫卷標,也可以寫uuid
普通用戶不能掛載

查看掛載:
df ,mount, cat /etc/mtab(會根據掛載情況自動更新),cat /proc/mounts內核記錄掛載的設備
查看ext4文件系統元數據:tune2fs -l /dev/sdb2,有掛載次數
tune2fs -c # /dev/sdb2,更改最大掛載次數觸發fsck
tune2fs -C # /dev/sdb2 ,更改當前掛載次數
mount 命令
-a自動掛載,讀取/etc/fstab配置文件
-r只讀掛載,-w讀寫掛載(默認rw),
-n:不更新/etc/mtab,mount不可見,隱藏掛載,centos7不起作用(指向了proc下的文件)
-L ‘LABEL’:以卷標指定掛載設備
-B(--bind)綁定目錄到另一個目錄上
-o 後跟掛載屬性:
async:異步模式,默認
sync:同步模式,內存更改時,同時寫磁盤
atime/noatime:包含目錄和文件,網站中的文件可以設置
diratime/nodiratime:目錄的訪問時間戳
auto/noauto:是否支持自動掛載,是否支持-a選項
exec/noexec:是否支持將文件系統上運行應用程序
dev/nodev:是否支持在此文件系統上使用設備文件
suid/nosuid:是否支持suid和sgid權限
remount:重新掛載
ro:只讀 ,rw:讀寫
user/nouser:是否允許普通用戶掛載此設備,/etc/fstab使用
acl:啓用此文件系統上的acl功能
loop:使用loop設備
_netdev當網絡可用時纔對網絡設備掛載,如NFS系統
defaults:相當於rw,suid,dev,exec,auto,nouser,async

更改分區的卷標名:e2label /ev/sdb2 / /data/sdb2
mount /dev/sdb2 /data/sdb2或者mount LABEL=/data/sdb2 /data/sdb2
mount命令可以查看掛載點,或者cat /etc/mtab(該文件會自動更新,記錄當前設備掛載情況)

查看目錄誰在用:lsof /data/html 或fuser -v /data/html
強行踢出:fuser -km /data/html,終止前先發公告通知
取消掛載 umount /data/sdb2(寫卷標名,掛載點都行)

只讀掛載:mount -r /ev/sdb1 /data/sdb1
不取消掛載的情況下重新掛載更改設置:mount -o remount,ro /data/sdb1
Centos6有用,7沒用隱藏掛載:mount -n /ev/sdb1 /data/sdb1,只能通過cat /proc/mounts查看

目錄掛載目錄:mount -B(--bind)/data/sdb1 /mnt/sdb1
查看文件夾目錄是否是掛載狀態:findmnt /data/sdb2
※查看目錄是否是掛載狀態
findmnt /data/sdb2 &> /dev/null || mount /dev/sdb2 /data/sdb2

自己創建的塊設備掛載目錄:
dd if=/dev/zero of=/root/p1 bs=1M count=100,mkfs.ext4 p1,blkid p1
mount -o loop /root/p1 /mnt,Centos7不需要加-o loop
想要永久保存,需要寫入/etc/fstab裏面,不能用uuid添加,需要用設備名:
/root/p1 /mnt/p1 ext4 loop 0 0

loop
losetup -a 可以查看文件設備和系統自動分配的loop#的映射關係
centos6最多可以掛載8個塊設備,其他的需要自己添加,
mknod /dev/loop8 b 7 8,自己創建loop8設備
指定loop8需要人爲關聯,losetup /dev/loop8 p2
如果需要很多,需要改kernel文件,vim /boot/grub/grub.conf,在kernel那行尾加 max_loop=100
生效需要重啓設備

文件夾掛載文件夾保存到文件:
/etc/fstab應該這樣寫:/boot /mnt/boot none bind 0 0,然後mount -a
※想要永久掛載光盤,只能寫設備名:
如:/dev/sr0 /mnt/cdrom iso9660 defaults 0 0,然後mount -a掛載/etc/fstab下的所有文件系統
※/etc/fstab
可以把分區掛到文件夾,可以把文件夾掛到文件夾,可以文件掛文件夾
也可以把網絡資源掛載到目錄,掛載即關聯
掛載重啓後會失效,mount命令是臨時掛載
要是生效必須存文件:/etc/fstab
改配置文件之前一定先備份:cp /etc/fstab{,.bak}
最後的兩個數字第一個1表示1天備份一次,第二個是開機是否檢查0不檢查,其他是檢查次序
如果最後一個是非0,uuid對應設備不存在會導致系統無法正常啓動,掛載點不存在不影響
文件編輯保存後,運行mount -a後會自動掛載
如果修改fstab裏面的參數,例如添加acl,需要取消掛載重新掛
不取消掛載生效:mount -o remount /data/sdb2

※實驗:centos6上修改/etc/fstab下的文件導致系統無法啓動,輸入root口令
修改文件,由於文件系統是隻讀的,需要輸入命令修改:
mount -o rw,remount /,可以修改uuid或者直接用分區名,或者把最後一個數字改爲0
※利用光盤製作iso鏡像(centos6):(dvd1,dvd2和二爲1)
1、先把兩個光盤分別掛到目錄dvd1,dvd2下,先拷貝第一個光盤內容到新建目錄(dvd)下,然後拷貝第二張光盤中Packages中*.rpm到dvd目錄的Packages目錄中;
2、合併TRANS.TBL,cat dvd1/TRANS.TBL dvd2/TRANS.TBL|sort >dvd/TRANS.TBL
3、製作iso文件:mkiso -r -o Centos-6.10-x86_64.iso dvd/,然後把iso文件掛載(-r是全部文件讀取權限)mount -o loop Centos-6.10-x86_64.iso mnt/cdrom,centos7不需要加-o loop
4、備份原來的yum配置文件,新建配置文件指向iso文件
5、更新yum源:yum clean all ,yum repolist
※把根下的home文件夾掛到單獨分區
把之前掛在根下的/home掛到單獨分區上
1、備份數據
2、磁盤分區,要足夠大
3、創建文件系統:mkfs.ext4 /dev/sdb1 -L /home
4、創建臨時目錄/mnt/home,把分區掛載到mount /dev/sdb1 /mnt/home
5、init 1 切換到單用戶模式,runlevel可以查看確認,或通知用戶停止使用文件,以免文件丟失
6、複製/home下的文件,cp -av /home/** /mnt/home
7、確保目錄已經全部遷移,然後刪除原home目錄
8、vim /etc/fstab,(!blkid /dev/sdb1生成uuid),添加到文件,然後保存生效mount -a
9、init 3切換到正常模式,可以切換賬號測試
10、取消掛載臨時目錄,umount /mnt/home,rm -rf /mnt/home

swap

查看swap使用情況:free 默認是kb單位,free -m,以MB爲單位,或者free -g,-h(易讀方式)
swap和實際內存的比例爲:如果實際內存是4G以內:2:1,4個G以上配8個G
swapon -s(cat /proc/swaps)可以查看正在使用的swap分區,並且查看優先級,priority,
需要改/etc/fstab 裏面想要調高的swap分區,在defaults後面添加pri=100,例如defaults,pri=100
需要先swapoff /dev/sdb1然後再swapon -a生效
buffer(緩衝)一般是內存中做寫緩衝用的,cache是磁盤上讀緩存用的
測試:dd if=/dev/zero of=/dev/null bs=2G count=1

增加swap分區,最好是有獨立的磁盤
1.fdisk /dev/sdb,分區後需要改ID,選t,然後選L,選82,然後w保存退出
2.創建文件系統:mkswap /dev/sdb1 -L swap_sdb1
3,掛載並永久保存,/etc/fstab,
UUID=XXX swap swap defaults,pri=100 0 0
4,生效需要運行:swapon -a

增加swap分區,用文件來實現
dd if=/dev/zero of=/swapfile bs=2024M/2G count=1
2.創建文件系統:mkswap /swapfile -L swap_file,查看blkid /swapfile
3,掛載並永久保存,/etc/fstab,
/swapfile swap swap defaults 0 0
4,生效需要運行:swapon -a

取消操作:
1、取消swap分區:swapoff /dev/sdb1 ,swapon -s 等同於cat /proc/swaps
取消swap文件:swapoff /swapfile, swapon -s查看
2、/etc/fstab裏面的增加的兩行刪掉
3、rm -f /swapfile 或刪除分區,fdisk /dev/sdb,d,w

df 查看文件系統佔用等信息(默認以K爲單位)
-H 以10爲單位
-h 以易讀的方式
-T 顯示文件系統
-i 顯示節點編號
-P以POSTIX標準格式輸出
du 查看某目錄總體佔用空間狀態(默認以K爲單位)
-s 是顯示總大小,不加是分別顯示
-h 是以人類易讀的方式顯示
--max-depth=#指定最大目錄層級
dd:convert and copy a file
if=file 從所命名文件讀取而不是從標準輸入
of=file 寫到命名的文件,而不是標準輸出
ibs=size 一次讀size個byte
obs=size 一次寫size個byte
bs=size block size,指定塊大小
cbs=size 一次轉化size個byte
skip=blocks從開頭忽略bolcks個ibs大小的塊
seek=blocks從開頭忽略blocks個obs大小的快
count=n 複製n個bs

備份/dev/sdx全盤數據,並利用gzip壓縮,保存的指定路徑
dd if=/dev/sdx | gzip > /path/to/image.gz

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章