磁盤管理

本章節主要介紹磁盤分區、文件系統、掛載、以及swap,另外還有工具dd的使用等等。

新加磁盤

echo?? ‘- – -’? > /sys/class/scsi_host/host2/scan?????? //使新加磁盤生效

lsblk????? //查看磁盤????? 或?????? ls??? /dev/sd*???? -l???? 或? cat?? /proc/partitions

dd?? if=/dev/zero?? of=f1? bs=1M?? count=1024?? //可用來測磁盤速度

設備文件:

一切皆文件: open()? ,? read() ,?? write() ,?? close()

設備文件:關聯至一個設備驅動程序,進而能夠跟與之對應的硬件設備進行通信

字符設備塊設備區別

塊設備是物理存在的,有緩存,? 隨機訪問,以塊為單位存儲

字符設備沒有緩存,按順序訪問,以字符為單位存儲

mknod???? /data/sdA??? b? 8? 1???? //創建指定類型的設備

設備號碼: 主設備號(標識設備類型); 次設備號(標識同一類型下的不同設備)

硬盤接口類型:并行?? 串口???? rpm(磁盤轉速)

磁盤設備的設備文件命名: /dev/DEV_FILE

虛擬磁盤:/dev/vd????? (例如云服務器)

不同版本的系統的硬盤名稱不同

分區的設備名稱不穩定;

磁盤的容量大小計算:512*扇區數(sector)*磁道數(track)*盤面數(head)

一個磁道用6位二進制數表示扇區數,最多有64個扇區

10位存放磁道數,最多有1024磁道

8位存放磁頭,最多有256磁頭

柱面(cylinder):所有相同磁道組成的柱面

區位記錄磁盤扇區結構:ZBR(區位記錄:Zoned Bit Recording)

CHS(磁盤三圍 :c代表柱面,h磁頭,s扇區)和LBA:

CHS:采用24bit位尋址;最大尋址空間為8GB

LBA: 采用48bit位尋址;最大尋址空間為128PB

由于CHS尋址方式的尋址空間在大概8GB以內,所以在磁盤容量小于大概8GB時,可以使用CHS尋址方式或是LBA尋址方式;在磁盤容量大于大概8GB時,則只能使用LBA尋址方式

磁盤的使用:分區;創建文件系統:格式化;掛載:分配目錄名

磁盤為什么分區:

優化I/O性能;實現磁盤空間配額限制;提高修復速度;隔離系統和程序;安裝多個OS;采用不同的文件系統

兩種分區方式:MBR,GPT

MBR分區:分區不超過2T;按柱面分區;使用32位表示扇區數

結構:

10

0磁道0扇區:446bytes?? //用于啟動計算機

64 bytes?? //分區表??? 其中??? 16bytes: //標識一個分區

2bytes?? :?? 55AA標記位

dd? if=/dev/sda ??of=/data/mbr_back??? bs=1? count=512? //備份分區表

dd? if=/dev/zero?? of=/dev/sda??? bs=1? count=512????? //破壞分區表

救援模式修復分區表

重啟,第三項(troubleshooting),第二項(救援模式),選1繼續;設置IP地址(ifconfig??? ens32??? 192.168.10.100/24),拷貝備份的分區表文件,恢復分區表? ?dd if=mbr_bak?? of =/dev/sda

硬盤主導記錄MBR由四個部分組成:

  1. 主引導程序,負責從活動分區中加載,并運行系統引導程序
  2. 出錯信息數據區
  3. 分區表
  4. 結束標志字,偏移地址01FE—01FF的2個字節值為結束標志55AA

dd? if =/dev/sda? of=/dev/sdd??? bs=1 ?count=512?? //克隆分區,僅克隆主分區(MBR)

dd? if=/dev/sda?? of=/data/mbr_back??? bs=1? count=2? -skip=510? //破壞55AA標記

GPT分區

GUID;支持128個分區,使用64位,支持8Z??? 64Z

使用128位UUID表示磁盤和分區GPT分區表自動備份在頭和尾兩份并有CRC校驗位

UEFI(統一擴展固件接口)硬件支持GPT,使操作系統啟動

uuidgen??????? //生成隨機的UUID

管理分區

列出塊設備:lsblk

創建分區使用:fdisk?? 創建MBR分區;

gdisk? 創建GPT分區

parted? 高級分區操作

partprobe? –?? 重新設置內存中的內核分區表版本

parted命令(parted的操作都是實時生效的,小心使用)

parted??? /dev/sdb??? mklabel?? gpt|msdos??????? //創建分區,并指定分區的類型

parted? /dev/sdb? mkpart?? primary? 1 1000(默認以M為單位) //創建分區指定大小

parted??? /dev/sdb????? print??? //顯示分區情況

parted??? /dev/sdb????? rm?? 數字? //刪除分區

parted?? -l??? //列出分區信息(可跟設備名,查看某設備的具體分區情況)

創建邏輯分區后,刪除第一個邏輯分區,其他的邏輯分區的名稱會發生變化

分區工具fdisk和gdisk

fdisk? -l? -[u]? [device…]? 查看分區? 或?? lsblk?? 兩者結果不同,需同步分區表

fdisk? /dev/sdb?? 管理分區

子命令:?? p? 分區列表?????? t?? 更改分區類型??????? o? 創建一個空的mbr分區

n 創建新的分區??????? d刪除分區?????????? v? 校驗分區

u 轉換單位??????????? w 保存退出????????? q? 不保存退出

同步分區表

查看內核是否已經識別新的分區:cat ?/proc/partitions

Centos6中:

新增分區: partx? -a?? /dev/DEVICE??? //實現分區同步

Kpartx????? -a??? /dev/DEVICE???? -f:? force?? //實現分區同步

刪除分區:? partx? -d? –nr M-N? /dev/DEVICE

Centos7使用partprode????????????? partprode?? [/dev/DEVICE]

文件系統:負責為用戶建立文件,存入、讀出、修改、轉儲文件,控制文件的存取,安全控制,日志 ,壓縮,加密等

支持的文件系統:?? /lib/modules/`uname -r`/kernel/fs?? //存放了所有的文件系統

Linux? 文件系統:ext2 ,ext3,ext4,xfs(SGI) ,btrfs (Oracle) ,reiseerfs,jfs(AIX) ,swap

網絡文件系統:NFS??????????? CIFS

集群文件系統:? GFS2?????? OCFS2 (oracle)

分布式文件系統: fastdfs ,ceph ,moosefs ,mogilefs ,glusterfs ,Lustre

Raw :未經處理或未經格式化產生的文件系統

文件系統分類

根據其是否支持”journal”功能:

日志型文件系統:ext3 , ext4 ,xfs ,….

非日志型文件系統:ext2 ,vfat

cache?? 針對讀操作(緩存)

buffer??? 針對寫操作(緩沖區)

文件系統的組成部分

內核中的模塊: ext4 ,xfs , vfat

用戶空間的管理工具:mkfs.ext4? ,mkfs.xfs , mkfs.vfat

Linux的虛擬文件系統:VFS

查看支持的文件系統: cat? /proc/filesystems

blkid?? /dev/sdb1??? //查看設備的文件系統類型

df?? -T??? //查看已掛載的塊設備的文件系統

blkid???? //查看全部塊設備的文件系統類型

創建文件系統

mkfs? 命令:? mkfs.FS_TYPE? /dev/DEVICE

ext4 ,xfs , vfat? ,btrfs

mkfs? -t? FS_type? /dev/DEVICE

-L? ‘label’?? :設定卷標

創建ext文件系統:

mke2fs? :ext 系列文件系統的專用管理工具

-m??? 默認5%,可指定預留空間占總空間的百分比

-b??? {1024|2018|4096}? 塊大小

-l???? 一個節點記錄占用的磁盤空間大小

-L “將來掛載點目錄”???? 加卷標

-i???? 為數據創建iNode ,該大小不小于塊大小

-O? FEATURE?? 啟用某功能

-O? ^FEATURE??? 禁用某功能

文件系統標簽:指向設備的另一種方法,與設備無關

blkid? :塊設備屬性信息查看

blkid?? [option]…?? [device]

-U?? UUID?? :根據指定的UUID來查找對應的設備文件

-L??? LABEL :根據指定的LABEL來查找對應的設備文件

e2label? :管理ext系列文件系統的LABEL

e2label?? DEVICE?? [LABEL]???? 修改卷標

blkid -U `grep “/data” /etc/fstab |cut -d ” ” -f1 |cut -d= -f2` 查看/data對應設備文件

blkid -U `grep “/data” /etc/fstab |sed -r “s@UUID=(.*) /data.*@\1@”`

findfs:查找分區

findfs?? [options]?? LABEL=<label>??? 以卷標為搜索條件,查找設備名

findfs?? [options]? UUID=<uuid>

tune2fs: 重新設定ext系列文件系統可調整參數的值

-l?? 查看指定文件系統超級塊信息;super block

-L? ‘LABEL’???? 修改卷標

-m? #???? 修預留給管理員的空間百分比

-j??? 將ext2 升級為ext3

-O? 文件系統屬性啟用或禁用??? -O? ^FEATURE?? 禁用

-o?? 調整文件系統默認的掛載選項

-U?? UUID??? 修改UUID號

tune2fs?? -o?? acl? /dev/sdb1??? //在centos6上需對新加塊設備設置acl功能

centos7上新創建的分區默認就有acl功能

dumpe2fs? :? 塊分組管理,32678塊

-h??? 查看超級塊信息,不顯示分組信息

文件系統檢測和修復(常發生于死機或非正常關機后)

掛載為文件系統標記為:“no?? clean”(注意,不要在掛載狀態下修復)

fsck?? -t? FS_TYPE??? 或?? fsck.FS_TYPE? (修復文件系統時,不能處于掛載狀態)

-p?? 自動修復錯誤

-r??? 交互式修復錯誤

-y??? 自動回答yes

FS_TYPE???? 與分區上已經存在的文件類型相同

fsck???? //修復文件系統(修復的是軟件邏輯上的破壞)

e2fsck?? ext系列文件專用的檢測修復工具

-y??? 自動回答yes

-f???? 強制修復

超級快和inode table :

塊大?。?KB

超級快:存放當前分區的元數據信息

inode? table:存放文件的元數據,屬性,大小,權限

掛載mount:(普通用戶不能掛載)

注意:一個掛載點同一時間只能掛一個設備;一個設備可同時掛載到多個目錄

掛載點下的源文件在掛載完成后會被臨時隱藏

掛載點:(事先存在,建議使用空目錄,進程正在使用中的設備無法被卸載)

掛載:將額外的文件系統與根文件系統某現存的目錄建立關聯關系,進而使此目錄作為其他文件訪問入口的行為

卸載:解除此關聯關系的過程

掛載方法:? mount??? DEVICE???? MOUNT_POINT

mount?? :通過查看/etc/mtab 文件顯示當前已掛載的所有設備文件

mount?? [-fnrsvw] ?[-t vfstype]? [-o options]? device? dir

-a?? 實現自動掛載,使修改的配置文件立即生效(若文件中存在,僅修改部分參數,該命令無效,只能用remount 實現重新掛載)

-r?? 以只讀方式掛載設備(只能查看文件,不允許刪除)

-w?? 可讀可寫(默認)

-n??? 隱藏掛載(centos6? 有效)?? cat? /proc/mounts??? 即可看到隱藏掛載項

-B?? 或 –bind??? 綁定目錄到指定目錄(目錄掛目錄)

-o?? acl?????? //掛載時添加上acl功能

async????? 異步模式

sync??????? 同步模式,內存更改時,同時寫磁盤

noexec?????? 禁止程序執行(但bash 可執行)

remount?????? 重新掛載(特定環境不能取消掛載,即可利用當前命令掛載)

?????? loop?????? 掛載文件到目錄上(實現文件模擬分區)

losetup?? -a?? //? 可查看模擬分區的文件(centos6 默認有8個)

vim?? /boot/grub/grun.conf???????? //修改kernel行的最后? max_loop=100

查看內核追蹤到的已掛載的全部設備:?? cat?? /proc/mounts(centos6上)

卸載命令

查看掛載情況:? findmnt??? MOUNT_POINT |device

查看正在訪問的指定文件系統的進程

lsof??? MOUNT_POINT

fuser?? -v? MOUNT_POINT

終止所有正在訪問指定的文件系統的進程

fuser?? -km? MOUNT_POINT

卸載

umount???? DEVICE

umount???? MOUNT_POINT

實現掛載的永久生效:寫入文件/etc/fstab

掛載文件的內容錯誤

  1. UUID錯誤,重啟機器將失敗,需將文件的最后內容改為0(即不檢查)重啟可遠程后,修改為正確的UUID即可
  2. 掛載點出錯,重啟機器成功,只需重新掛載即可

如何將/home整個目錄遷移到一個新的大的磁盤上?

? dd? /dev/zero?? /dev/sdb?? bs=1?? count=512?? //破壞分區即可刪除分區

???? 首先備份/home

  1. fdisk 先分一個大的分區50G(分區大小不可更改)

2 .mkfs.ext4??? /dev/sdb1? -L? /home 創建文件系統

  1. mkdir /mnt/home
  2. mount /dev/sdb1 /mnt/home
  3. init 1 單用戶登錄,確保只有自己在訪問? (網絡出現問題)
  4. cp -av /home/*??? /mnt/home/
  5. rm –rf /home/*
  6. vim /etc/fstab

UUID=xxxxx????? /home???? ext4???? defaults?? 0? 0

  1. mount -a

ls??? /home? /mnt/home?? -l

  1. umount /mnt/home??? ; rm?? -rf?? /mnt/home
  2. init 5

恢復原狀態:

  1. mkdir /mnt/home
  2. mount /dev/sdb1??? /mnt/home
  3. init 1??? ;???? umount???? /home
  4. cp -av????? /mnt/home/*???? /home/
  5. 刪除文件中的配置 ;?? umount?? /mnt/home
  6. 刪除sdb1分區;( fdisk??? d???? 1???? w????? )

文件中寫:文件中寫:掛載光盤: /dev/sr0??? /mnt/cdrom? iso9660??? defaults???? 0 0

文件夾掛載到文件夾:? /boot?? /mnt/boot??? none???? bind?? 0? 0

將文件掛載目錄:/root/p1(設備文件名)???? /mnt/p1(掛載點)? ext4??? loop??? 0? 0? (模擬文件分區掛載)

處理交換文件和分區:

交換分區是系統RAM的補充

基本設置包括:創建交換分區或者文件、使用mkswap寫入特殊簽名、在/etc/fstab文件中添加適當的條目、使用swapon?? -a?? 激活交換空間

掛載交換分區:

swapon 啟用

-a? 激活所有的交換分區

-p?? PRIORITY?? 指定優先級

/etc/fstab:pri=value

禁用swapoff? [option]…?? [DEVICE]

SWAP的優先級

可以指定swap分區0到32767的優先級,值越大優先級越高

如果用戶沒有指定,那么核心會自動給swap指定一個優先級,這個優先級從 -1開始,每加入一個新的沒有用戶指定優先級的swap,會給這個優先級減一

先添加的swap的缺省優先級比較高,除非用戶自己指定一個優先級,而用戶 指定的優先級(是正數)永遠高于核心缺省指定的優先級(是負數)

優化性能:分布存放,高性能磁盤存放

swapon [OPTION]… [DEVICE]

-a:激活所有的交換分區

-p PRIORITY:指定優先級

/etc/fstab:pri=value? 可寫入文件,使之永久生效(禁用swap在啟用即可生效)

mkswap?? 創建文件系統

修改fstab文件:? UUID=xxxx????? 掛載點??? swap?????? defaults;pri=100 ??0? 0

swapon?? -a???? //使swap分區生效

swapon???? -s???? 查看所有生效的swap分區的信息

swapoff?????? 禁用swap分區

擴充swap分區:(該方法需要有磁盤空間)

  1. 分區,一個2G的swap分區, 改成82類型
  2. mkswap /dev/sdb1???? -L????? swap_sdb1??? 創建文件系統
  3. 修改fstab文件: UUID=xxxx????? 掛載點??? swap ?????defaults?? 0?? 0
  4. swapon -a???? //使swap生效

使用文件模擬swap

dd?? if=/dev/zero?? of=/swapfile?? bs=1024M? count=2?? //生成2G 的swap文件

mkswap??? ?/swapfile?? ??-L??? swap_file????? (t??? 82 使用fdisk給分區指定文件系統)

修改fstab文件:? /swapfile????? swap(掛載點)??? swap???? defaults??? 0?? 0

swapon?? -a???? //使swap分區生效

eject??? 彈出光盤

eject?? -t???? 彈入光盤.

創建ISO文件:?? cp??? /dev/sr0????? /data/centos7.iso

dd??? /dev/sr0???? /data/centos7.iso

mkisofs??? -r? -o?? /data/centos7.iso???? /etc

合并光盤:(可以用來做yum原,不能用來啟動光盤)

mkdir???? /centos6

cp??? /mnt/cdrom/*???? /centos6/?? -r? (復制兩張盤內容到同一文件夾)

mkisofs??? -r? -o?? /data/centos7.iso???? /centos6/

掛載USB介質

lsusb???? 查看USB設備

tail??? /var/log/messages???? -f??? 查看日志文件

查看USB設備是否識別 : lsusb

被內核探測為SCSI設備 :/dev/sdaX、/dev/sdbX、或類似的設備文件

在圖形環境中自動掛載 :圖標在[計算機]窗口中創建 , 掛載在/run/media//

手動掛載 : mount /dev/sdb1 /mnt

常見工具:

文件系統空間占用等信息的查看工具: df [OPTION]… [FILE]…

-H 以1000為單位

-T 文件系統類型

-h: human-readable? 以1024為單位

-i:inodes instead of blocks

-P: 以Posix兼容的格式輸出

查看某目錄總體空間占用狀態: du [OPTION]… DIR? (默認統計每個子文件夾的大?。?/p>

-h: human-readable ??(加上單位,默認為K)

-s: summary? (總大?。????? ?–max-depth?? (最大深度)

工具dd:(克隆分區只是克隆MBR分區內容)

dd命令:convert and copy a file

用法: dd if=/PATH/FROM/SRC of=/PATH/TO/DEST

bs=#:block size, 復制單元大小

count=#:復制多少個bs

skip=blocks? ?從開頭忽略blocks個ibs大小的塊

seek=blocks ??從開頭忽略blocks個obs大小的塊

conv=conversion[,conversion…] 用指定的參數轉換文件

轉換參數: ascii 轉換 EBCDIC 為 ASCII

ebcdic 轉換 ASCII 為 EBCDIC

lcase 把大寫字符轉換為小寫字符

ucase 把小寫字符轉換為大寫字符

nocreat 不創建輸出文件

noerror 出錯時不停止

notrunc 不截短輸出文件

sync 把每個輸入塊填充到ibs個字節,不足部分用空(NUL)字 符補齊

備份MBR: dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

破壞MBR中的bootloader: dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446

例題:有一個大與2K的二進制文件fileA?,F在想從第64個字節位置開始讀取,需要讀 取的大小是128Byts。又有fileB, 想把上面讀取到的128Bytes寫到第32個字節開 始的位置,替換128Bytes,實現如下:

dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc

備份:

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 if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000

測試硬盤讀速度?? ?dd if=/root/1Gb.file bs=64k | dd of=/dev/null

修復硬盤 dd if=/dev/sda of=/dev/sda

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/97027

(0)
qljqlj
上一篇 2018-04-25 09:26
下一篇 2018-04-25 19:24

相關推薦

欧美性久久久久