天天看點

[Linux] Disk management

Linux磁盤管理

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

機械式硬碟:

track:磁道

cylinder: 柱面

secotr: 扇區

512bytes

如何分區:

按柱面

0磁道0扇區:512bytes

MBR: Master Boot Record

446bytes: boot loader

64bytes:分區表

16bytes: 辨別一個分區

2bytes: 55AA

4個主分區;

3主分區+1擴充(N個邏輯分區)

邏輯分區

問題:UEFI, GPT?

分區管理工具:fdisk, parted, sfdisk

fdisk:對于一塊硬碟來講,最多隻能管理15分區;

# fdisk -l [-u] [device...]

# fdisk device

子指令:管理功能

p: print, 顯示已有分區;

n: new, 建立

d: delete, 删除

w: write, 寫入磁盤并退出

q: quit, 放棄更新并退出

m: 擷取幫助

l: 清單所分區id

t: 調整分區id

檢視核心是否已經識别新的分區:

# cat /proc/partations

通知核心重新讀取硬碟分區表:

partx -a /dev/DEVICE

-n M:N

kpartx -a /dev/DEVICE

-f: force

CentOS 5: 使用partprobe

partprobe [/dev/DEVICE]

Linux檔案系統管理:

Linux檔案系統: ext2, ext3, ext4, xfs, btrfs, reiserfs, jfs, swap

swap: 交換分區

CD光牒:iso9660

Windows:fat32, ntfs

Unix: FFS, UFS, JFS2

網絡檔案系統:NFS, CIFS

叢集檔案系統:GFS2, OCFS2

分布式檔案系統:ceph, 

moosefs, mogilefs, GlusterFS, Lustre

根據其是否支援"journal"功能:

日志型檔案系統: ext3, ext4, xfs, ...

非日志型檔案系統: ext2, vfat

檔案系統的組成部分:

核心中的子產品:ext4, xfs, vfat

使用者空間的管理工具:mkfs.ext4, mkfs.xfs, mkfs.vfat

Linux的虛拟檔案系統:VFS

建立檔案系統:

mkfs指令:

(1) # mkfs.FS_TYPE /dev/DEVICE

ext4

xfs

btrfs

vfat

(2) # mkfs -t FS_TYPE /dev/DEVICE

-L 'LABEL': 設定卷标

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 #: 為管理人員預留的空間占據的百分比;

-O FEATURE[,...]:啟用指定特性

-O ^FEATURE:關閉指定特性

mkswap:建立交換分區

mkswap [options] device

-L 'LABEL'

前提:調整其分區的ID為82;

其它常用工具:

blkid:塊裝置屬性資訊檢視

blkid [OPTION]... [DEVICE]

-U UUID: 根據指定的UUID來查找對應的裝置

-L LABEL:根據指定的LABEL來查找對應的裝置

e2label:管理ext系列檔案系統的LABEL

# e2label DEVICE [LABEL]

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

-l:檢視指定檔案系統超級塊資訊;super block

-L 'LABEL':修改卷标

-m #:修預留給管理者的空間百分比

-j: 将ext2更新為ext3

-O: 檔案系統屬性啟用或禁用

-o: 調整檔案系統的預設挂載選項

-U UUID: 修改UUID号;

dumpe2fs:

-h:檢視超級塊資訊

檔案系統檢測:

fsck: File System CheCk

fsck.FS_TYPE

fsck -t FS_TYPE

-a: 自動修複錯誤

-r: 互動式修複錯誤

Note: FS_TYPE一定要與分區上已經檔案類型相同;

e2fsck:ext系列檔案專用的檢測修複工具

-y:自動回答為yes; 

-f:強制修複;

vfs: xfs, ext{2|3|4}, btrfs

檔案系統管理:

将額外檔案系統與根檔案系統某現存的目錄建立起關聯關系,進而使得此目錄做為其它檔案通路入口的行為稱之為挂載;

解除此關聯關系的過程稱之為解除安裝;

把裝置關聯挂載點:Mount Point

mount

解除安裝時:可使用裝置,也可以使用挂載點

umount

注意:挂載點下原有檔案在挂載完成後會被臨時隐藏;

挂載方法: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:挂載點

事先存在;建議使用空目錄;

程序正在使用中的裝置無法被解除安裝;

常用指令選項:

-t vsftype:指定要挂載的裝置上的檔案系統類型;

-r: readonly,隻讀挂載;

-w: read and write, 讀寫挂載;

-n: 不更新/etc/mtab; 

-a:自動挂載所有支援自動挂載的裝置;(定義在了/etc/fstab檔案中,且挂載選項中有“自動挂載”功能)

-L 'LABEL': 以卷标指定挂載裝置;

-U 'UUID': 以UUID指定要挂載的裝置;

-B, --bind: 綁定目錄到另一個目錄上;

注意:檢視核心追蹤到的已挂載的所有裝置:cat /proc/mounts

-o options:(挂載檔案系統的選項)

async:異步模式;

sync:同步模式;

atime/noatime:包含目錄和檔案;

diratime/nodiratime:目錄的通路時間戳

auto/noauto:是否支援自動挂載

exec/noexec:是否支援将檔案系統上應用程式運作為程序

dev/nodev:是否支援在此檔案系統上使用裝置檔案;

suid/nosuid:

remount:重新挂載

ro:

rw:

user/nouser:是否允許普通使用者挂載此裝置

acl:啟用此檔案系統上的acl功能

注意:上述選項可多個同時使用,彼此使用逗号分隔;

 預設挂載選項:defaults

  rw, suid, dev, exec, auto, nouser, and async

解除安裝指令:

# umount DEVICE

# umount MOUNT_POINT

檢視正在通路指定檔案系統的程序:

# fuser -v MOUNT_POINT

終止所有在正通路指定的檔案系統的程序:

# fuser -km MOUNT_POINT

挂載交換分區:

啟用:swapon

swapon [OPTION]... [DEVICE]

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

-p PRIORITY:指定優先級;

禁用:swapoff [OPTION]... [DEVICE]

記憶體空間使用狀态:

free [OPTION]

-m: 以MB為機關

-g: 以GB為機關

檔案系統空間占用等資訊的檢視工具:

df: 

-h: human-readable

-i:inodes instead of blocks

-P: 以Posix相容的格式輸出; 

檢視某目錄總體空間占用狀态:

du:

du [OPTION]... DIR

-h: human-readable

-s: summary

指令總結:mount, umount, free, df, du, swapon, swapoff, fuser

檔案挂載的配置檔案:/etc/fstab

每行定義一個要挂載的檔案系統;

要挂載的裝置或僞檔案系統 挂載點 檔案系統類型   挂載選項 轉儲頻率   自檢次序

要挂載的裝置或僞檔案系統:

裝置檔案、LABEL(LABEL="")、UUID(UUID="")、僞檔案系統名稱(proc, sysfs)

挂載選項:

defaults

轉儲頻率:

0:不做備份

1:每天轉儲

2:每隔一天轉儲

自檢次序:

0:不自檢

1:首先自檢;一般隻有rootfs才用1;

...

檔案系統上的其它概念:

Inode: Index Node, 索引節點

位址指針:

直接指針:

間接指針:

三級指針:

inode bitmap:對位辨別每個inode空閑與否的狀态資訊;

連結檔案:

硬連結:

不能夠對目錄進行;

不能跨分區進行;

指向同一個inode的多個不同路徑;建立檔案的硬連結即為為inode建立新的引用路徑,是以會增加其引用計數;

符号連結:

可以對目錄進行;

可以跨分區;

指向的是另一個檔案的路徑;其大小為指向的路徑字元串的長度;不增加或減少目标檔案inode的引用計數;

ln [-sv] SRC DEST

-s:symbolic link

-v: verbose

檔案管理操作對檔案的影響:

檔案删除:

檔案複制:

檔案移動:

練習:

1、建立一個20G的檔案系統,塊大小為2048,檔案系統ext4,卷标為TEST,要求此分區開機後自動挂載至/testing目錄,且預設有acl挂載選項;

(1) 建立20G分區;

(2) 格式化:

mke2fs -t ext4 -b 2048 -L 'TEST' /dev/DEVICE

(3) 編輯/etc/fstab檔案

LABEL='TEST' /testing ext4 defaults,acl 0 0

2、建立一個5G的檔案系統,卷标HUGE,要求此分區開機自動挂載至/mogdata目錄,檔案系統類型為ext3;

3、寫一個腳本,完成如下功能:

(1) 列出目前系統識别到的所有磁盤裝置;

(2) 如磁盤數量為1,則顯示其空間使用資訊;

否則,則顯示最後一個磁盤上的空間使用資訊;

if [ $disks -eq 1 ]; then 

fdisk -l /dev/[hs]da

else 

fdisk -l $(fdisk -l /dev/[sh]d[a-z] | grep -o "^Disk /dev/[sh]d[a-]" | tail -1 | cut -d' ' -f2)

fi

RAID: 

Redundant Arrays of Inexpensive Disks

                   Independent

Berkeley: A case for Redundent Arrays of Inexpensive Disks RAID

提高IO能力:

磁盤并行讀寫;

提高耐用性;

磁盤備援來實作

級别:多塊磁盤組織在一起的工作方式有所不同;

RAID實作的方式:

外接式磁盤陣列:通過擴充卡提供适配能力

内接式RAID:主機闆內建RAID控制器

Software RAID:

級别:level

RAID-0:0, 條帶卷,strip; 

RAID-1: 1, 鏡像卷,mirror;

RAID-2

..

RAID-5:

RAID-6

RAID10

RAID01

RAID-0: 

讀、寫性能提升;

可用空間:N*min(S1,S2,...)

無容錯能力

最少磁盤數:2, 2+

RAID-1:

讀性能提升、寫性能略有下降;

可用空間:1*min(S1,S2,...)

有備援能力

RAID-4:

1101, 0110, 1011

讀、寫性能提升

可用空間:(N-1)*min(S1,S2,...)

有容錯能力:1塊磁盤

最少磁盤數:3, 3+

RAID-6:

可用空間:(N-2)*min(S1,S2,...)

有容錯能力:2塊磁盤

最少磁盤數:4, 4+

混合類型

RAID-10:

讀、寫性能提升

可用空間:N*min(S1,S2,...)/2

有容錯能力:每組鏡像最多隻能壞一塊;

最少磁盤數:4, 4+

RAID-01:

RAID-50、RAID7

JBOD:Just a Bunch Of Disks

功能:将多塊磁盤的空間合并一個大的連續空間使用;

可用空間:sum(S1,S2,...)

常用級别:RAID-0, RAID-1, RAID-5, RAID-10, RAID-50, JBOD

實作方式:

硬體實作方式

軟體實作方式 

CentOS 6上的軟體RAID的實作:

結合核心中的md(multi devices)

mdadm:模式化的工具

指令的文法格式:mdadm [mode] <raiddevice> [options] <component-devices>

支援的RAID級别:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10; 

模式:

建立:-C

裝配: -A

監控: -F

管理:-f, -r, -a

<raiddevice>: /dev/md#

<component-devices>: 任意塊裝置

-C: 建立模式

-n #: 使用#個塊裝置來建立此RAID;

-l #:指明要建立的RAID的級别;

-a {yes|no}:自動建立目标RAID裝置的裝置檔案;

-c CHUNK_SIZE: 指明塊大小;

-x #: 指明空閑盤的個數;

例如:建立一個10G可用空間的RAID5;

-D:顯示raid的詳細資訊;

mdadm -D /dev/md#

管理模式:

-f: 标記指定磁盤為損壞;

-a: 添加磁盤

-r: 移除磁盤

觀察md的狀态:

cat /proc/mdstat

停止md裝置:

mdadm -S /dev/md#

watch指令:

-n #: 重新整理間隔,機關是秒;

watch -n# 'COMMAND'

練習1:建立一個可用空間為10G的RAID1裝置,要求其chunk大小為128k,檔案系統為ext4,有一個空閑盤,開機可自動挂載至/backup目錄;

練習2:建立一個可用空間為10G的RAID10裝置,要求其chunk大小為256k,檔案系統為ext4,開機可自動挂載至/mydata目錄;

部落格作業:raid各級别特性;

LVM2:

LVM: Logical Volume Manager, Version: 2

dm: device mapper,将一個或多個底層塊裝置組織成一個邏輯裝置的子產品;

/dev/dm-#

/dev/mapper/VG_NAME-LV_NAME

/dev/mapper/vol0-root

/dev/VG_NAME/LV_NAME

/dev/vol0/root

pv管理工具:

pvs:簡要pv資訊顯示

pvdisplay:顯示pv的詳細資訊

pvcreate /dev/DEVICE: 建立pv

vg管理工具:

vgs

vgdisplay

vgcreate  [-s #[kKmMgGtTpPeE]] VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath...]

vgextend  VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath...]

vgreduce  VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath...]

先做pvmove

vgremove

lv管理工具:

lvs

lvdisplay

lvcreate -L #[mMgGtT] -n NAME VolumeGroup

lvremove /dev/VG_NAME/LV_NAME

擴充邏輯卷:

# lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME

# resize2fs /dev/VG_NAME/LV_NAME

縮減邏輯卷:

# umount /dev/VG_NAME/LV_NAME

# e2fsck -f /dev/VG_NAME/LV_NAME

# resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]

# lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME

# mount

快照:snapshot

lvcreate -L #[mMgGtT] -p r -s -n snapshot_lv_name original_lv_name

練習1:建立一個至少有兩個PV組成的大小為20G的名為testvg的VG;要求PE大小為16MB, 而後在卷組中建立大小為5G的邏輯卷testlv;挂載至/users目錄;

練習2: 建立使用者archlinux,要求其家目錄為/users/archlinux,而後su切換至archlinux使用者,複制/etc/pam.d目錄至自己的家目錄;

練習3:擴充testlv至7G,要求archlinux使用者的檔案不能丢失;

練習4:收縮testlv至3G,要求archlinux使用者的檔案不能丢失;

練習5:對testlv建立快照,并嘗試基于快照備份資料,驗正快照的功能;

檔案系統挂載使用:

挂載CD光牒裝置:

CD光牒裝置檔案:

IDE: /dev/hdc

SATA: /dev/sr0

符号連結檔案:

/dev/cdrom

/dev/cdrw

/dev/dvd

/dev/dvdrw

mount -r /dev/cdrom /media/cdrom

umount /dev/cdrom

dd指令:convert and copy a file

用法:

dd if=/PATH/FROM/SRC of=/PATH/TO/DEST 

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

count=#:複制多少個bs;

磁盤拷貝:

dd if=/dev/sda of=/dev/sdb

備份MBR

dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

破壞MBR中的bootloader:

dd if=/dev/zero of=/dev/sda bs=256 count=1

兩個特殊裝置:

/dev/null: 資料黑洞;

/dev/zero:吐零機;

部落格作業:lvm基本應用,擴充及縮減實作;

回顧:lvm2, dd

lvm: 邊界動态擴充或收縮;快照;

pv --> vg --> lv

PE:

LE:

dd: 複制

btrfs檔案系統:

技術預覽版

Btrfs (B-tree, Butter FS, Better FS), GPL, Oracle, 2007, CoW; 

ext3/ext4, xfs

核心特性:

多實體卷支援:btrfs可由多個底層實體卷組成;支援RAID,以聯機“添加”、“移除”,“修改”;

寫時複制更新機制(CoW):複制、更新及替換指針,而非“就地”更新;

資料及中繼資料校驗碼:checksum

子卷:sub_volume

快照:支援快照的快照;

透明壓縮:

檔案系統建立:

mkfs.btrfs

-d <type>: raid0, raid1, raid5, raid6, raid10, single

-m <profile>: raid0, raid1, raid5, raid6, raid10, single, dup

-O <feature>

-O list-all: 列出支援的所有feature;

屬性檢視:

btrfs filesystem show 

挂載檔案系統:

mount -t btrfs /dev/sdb MOUNT_POINT

透明壓縮機制:

mount -o compress={lzo|zlib} DEVICE MOUNT_POINT

繼續閱讀