天天看點

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

CD光牒: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

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,有挂載次數

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

※想要永久挂載CD光牒,隻能寫裝置名:

如:/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

※利用CD光牒制作iso鏡像(centos6):(dvd1,dvd2和二為1)

1、先把兩個CD光牒分别挂到目錄dvd1,dvd2下,先拷貝第一個CD光牒内容到建立目錄(dvd)下,然後拷貝第二張CD光牒中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生效

測試: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

/swapfile swap swap defaults 0 0