1. 程式人生 > >文件系統掛載、ext文件系統及read命令、Linux RAID、lvm應用

文件系統掛載、ext文件系統及read命令、Linux RAID、lvm應用

系統運維 linux

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

解除此關聯關系的過程稱之為卸載

把設備關聯至掛載點:mount_point

卸載時:可使用設備,也可以使用掛載點
umount /dev/device
umount mount_point

註意:掛載點下原有文件在掛載/卸載完成後會被臨時隱藏

掛載方法:mount device mount_point

mount 通過查看/etc/mtab文件顯示當前系統已掛載的所有設備
[root@localhost ~]# mount
/dev/mapper/VolGroup-lv_root on / type ext4 (rw)

proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

[root@localhost ~]# cat /etc/mtab
/dev/mapper/VolGroup-lv_root / ext4 rw 0 0

proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs rw,rootcontext="system_u:object_r:tmpfs_t:s0" 0 0
/dev/sda1 /boot ext4 rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0

mount [-fnrsvw] [-t vfstype] [-o options] device dir
device 指明要掛載的設備
1、設備文件,例如 /dev/sda5

[root@localhost ~]# mount /dev/sdb1 /mydata1

2、卷標 -L ‘LABEL’ 例如 -L ‘mydata‘
[root@localhost ~]# mount -L ‘mydata1‘ /mydata1

3、UUID -U ‘UUID’ 例如 -U ‘1cd75ebd-c3d8-4a0b-941b-43d520d4d71b’
[root@localhost ~]# mount -U ‘1cd75ebd-c3d8-4a0b-941b-43d520d4d71b‘ /mydata1

4、偽文件系統 proc sysfs devtmpfs configfs

dir 掛載點
事先存在,建議使用空目錄
進程正在使用中的設備無法被卸載
[root@localhost mydata1]# pwd
/mydata1
[root@localhost mydata1]# umount /mydata1
umount: /mydata1: device is busy.
                (In some cases useful info about processes that use
                 the device is found by lsof(8) or fuser(1))

常用選項:
-t vfstype 指定要掛載的設備上的文件系統類型
[root@localhost ~]# mount -t ext4 /dev/sdb1 /mydata1

-r readonly 只讀掛載
[root@localhost ~]# mount -r /dev/sdb1 /mydata1

-w read and write 讀寫掛載
[root@localhost ~]# mount -w /dev/sdb1 /mydata1

-a 自動掛載所有支持自動掛載的設備(定義在/etc/fstab文件中,且掛載選項中有"自動掛載"功能)
[root@localhost ~]# mount -a /dev/sdb1 /mydata1
[root@localhost ~]# cat /etc/mtab | grep "mydata1"
/dev/sdb1 /mydata1 ext4 rw 0 0
[root@localhost ~]# cat /proc/mounts | grep "mydata1"
/dev/sdb1 /mydata1 ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0
[root@localhost ~]# cat /etc/fstab | grep "mydata1"

-n 不更新/etc/mtab
[root@localhost ~]# mount -n /dev/sdb1 /mydata1
[root@localhost ~]# cat /etc/mtab | grep "mydata1"

-L ‘LABEL‘ 以卷標指定掛載設備
[root@localhost ~]# mount -L ‘mydata1‘ /mydata1

-U ‘UUID’ 以uuid指定要掛載的設備
[root@localhost ~]# mount -U ‘1cd75ebd-c3d8-4a0b-941b-43d520d4d71b‘ /mydata1

-B --bind 綁定目錄到另一個目錄上,在掛載點目錄上操作文件,該操作會同步到被被綁定的目錄上
[root@localhost ~]# mount /dev/sdb1 /mydata1
[root@localhost ~]# mount -B /mydata11 /mydata1

[root@localhost ~]# mkdir /mydata1/abc
[root@localhost ~]# touch /mydata1/123
[root@localhost ~]# ll /mydata1 /mydata11
/mydata1:
total 4
-rw-r--r--. 1 root root    0 May 21 11:21 123
drwxr-xr-x. 2 root root 4096 May 21 11:20 abc

/mydata11:
total 4
-rw-r--r--. 1 root root    0 May 21 11:21 123
drwxr-xr-x. 2 root root 4096 May 21 11:20 abc

註意:查看內核追蹤到的已掛載的所有設備 cat /proc/mounts
[root@localhost ~]# cat /proc/mounts
rootfs / rootfs rw 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,seclabel,relatime 0 0
devtmpfs /dev devtmpfs rw,seclabel,relatime,size=233488k,nr_inodes=58372,mode=755 0 0
devpts /dev/pts devpts rw,seclabel,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /dev/shm tmpfs rw,seclabel,relatime 0 0
/dev/mapper/VolGroup-lv_root / ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0
none /selinux selinuxfs rw,relatime 0 0
devtmpfs /dev devtmpfs rw,seclabel,relatime,size=233488k,nr_inodes=58372,mode=755 0 0
/proc/bus/usb /proc/bus/usb usbfs rw,relatime 0 0
/dev/sda1 /boot ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime 0 0
/dev/sdb1 /mydata1 ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0
/dev/mapper/VolGroup-lv_root /mydata1 ext4 rw,seclabel,relatime,barrier=1,data=ordered 0 0

-o options (掛載文件系統的選項)
async 異步模式
[root@localhost ~]# mount -o async /dev/sdb1 /mydata1

sync 同步模式
[root@localhost ~]# mount -o sync /dev/sdb1 /mydata1

atime/noatime 是否更新訪問時間戳,包含目錄和文件
[root@localhost ~]# mount -o atime /dev/sdb1 /mydata1
[root@localhost ~]# mount -o noatime /dev/sdb1 /mydata1

diratime/nodiratime 是否更新訪問時間戳,目錄的訪問時間戳
[root@localhost ~]# mount -o diratime /dev/sdb1 /mydata1
[root@localhost ~]# mount -o nodiratime /dev/sdb1 /mydata1

auto/noauto 是否支持自動掛載
[root@localhost ~]# mount -o auto /dev/sdb1 /mydata1
[root@localhost ~]# mount -o noauto /dev/sdb1 /mydata1

exec/noexec 是否支持將文件系統上應用程序運行為進程
[root@localhost ~]# mount -o exec /dev/sdb1 /mydata1
[root@localhost ~]# mount -o noexec /dev/sdb1 /mydata1

dev/nodev 是否支持在此文件系統上使用設備文件
[root@localhost ~]# mount -o dev /dev/sdb1 /mydata1
[root@localhost ~]# mount -o nodev /dev/sdb1 /mydata1

suid/nosuid 是否支持在此文件系統上設置suid權限
[root@localhost ~]# mount -o suid /dev/sdb1 /mydata1
[root@localhost ~]# mount -o nosuid /dev/sdb1 /mydata1

remount 重新掛載
[root@localhost ~]# mount /dev/sdb1 /mydata1
[root@localhost ~]# mount -o remount /dev/sdb1 /mydata1

ro 只讀掛載
[root@localhost ~]# mount -o ro /dev/sdb1 /mydata1

rw 讀寫掛載
[root@localhost ~]# mount -o rw /dev/sdb1 /mydata1

user/nouser 是否允許普通用戶掛載此設備
[root@localhost ~]# mount -o user /dev/sdb1 /mydata1
[root@localhost ~]# mount -o nouser /dev/sdb1 /mydata1

acl 啟用此文件系統的acl功能,訪問控制列表
[root@localhost ~]# mount -o acl /dev/sdb1 /mydata1

註意 上述選項可多個同時使用,彼此使用逗號分隔
默認掛載選項 defaults(包含 rw suid dev exec auto nouser sync)
[root@localhost ~]# mount -o defaults /dev/sdb1 /mydata1
[root@localhost ~]# mount -o rw,suid,dev,exec,auto,nouser,sync /dev/sdb1 /mydata1

卸載命令
umount device
umount mount_point
[root@localhost ~]# umount /dev/sdb1
[root@localhost ~]# umount /mydata1

查看正在訪問指定文件系統的進程
fuser -v mount_point
[root@localhost mydata1]# fuser -v /mydata1
                                         USER        PID ACCESS COMMAND
/mydata1:            root       1132 ..c.. bash

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

掛載交換分區
啟用 swapon
swapon [option]... [device]
-a 激活所有的交換分區
-p priority 指定優先級
[root@localhost ~]# swapon -a
[root@localhost ~]# swapon -p 1 /dev/sdb1

禁用 swapoff [option]... [device]
[root@localhost ~]# swapoff /dev/sdb1

內存空間使用狀態
free [option]
-m 以mb為單位
-g 以gb為單位 不滿1G 則顯示為0

    [root@localhost ~]# free -m
                             total       used       free     shared    buffers     cached
    Mem:           474        139        335          0          9         38
    -/+ buffers/cache:         90        383
    Swap:          959          0        959

    [root@localhost ~]# free -g
                             total       used       free     shared    buffers     cached
    Mem:             0          0          0          0          0          0
    -/+ buffers/cache:          0          0
    Swap:            0          0          0

文件系統空間占用等信息的查看工具
    df [option]... [device]
    -h human-readable 以人類易讀的格式輸出
    -i inode instead of blocks 輸出inode的使用情況
    -P 以posix兼容的格式輸出
    [root@localhost ~]# df -h
    Filesystem                    Size  Used Avail Use% Mounted on
    /dev/mapper/VolGroup-lv_root   19G  765M   17G   5% /
    tmpfs                         238M     0  238M   0% /dev/shm
    /dev/sda1                     485M   33M  427M   8% /boot

    [root@localhost ~]# df -h /dev/sda1
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda1       485M   33M  427M   8% /boot

    [root@localhost ~]# df -i
    Filesystem                    Inodes IUsed   IFree IUse% Mounted on
    /dev/mapper/VolGroup-lv_root 1218224 18620 1199604    2% /
    tmpfs                          60785     1   60784    1% /dev/shm
    /dev/sda1                     128016    38  127978    1% /boot

    [root@localhost ~]# df -P
    Filesystem                   1024-blocks   Used Available Capacity Mounted on
    /dev/mapper/VolGroup-lv_root    19166504 783284  17409604       5% /
    tmpfs                             243140      0    243140       0% /dev/shm
    /dev/sda1                         495844  33451    436793       8% /boot

查看某目錄總體空間占用狀態
du
du [option]... dir
-h human-readable 以人類易讀的格式輸出
-s summary 輸出總體情況

[root@localhost ~]# du -h /boot
13K /boot/lost+found
276K    /boot/grub
251K    /boot/efi/EFI/redhat
253K    /boot/efi/EFI
255K    /boot/efi
23M /boot

[root@localhost ~]# du -sh /boot
23M /boot

文件掛載的配置文件 /etc/fstab
每一行定義一個要掛載的文件系統

/etc/fstab 定義每個字段的意義
要掛載的設備或偽文件系統 掛載點 文件系統類型 掛載選項 轉儲頻率 自檢次序

要掛載的設備或偽文件系統
設備文件 label(label=‘‘) uuid(uuid=‘‘) 偽文件系統(proc sysfs)

掛載點
事先存在的目錄,最好為空目錄

文件系統
ext2、ext3、ext4、btrfs、xfs

掛載選項
defaults(nouser sync suid rw dev exec auto)

轉儲頻率(備份頻率)
0 不做備份
1 每天轉儲
2 每隔一天轉儲

自檢次序
0 不自檢
1 首先自檢 一般只有rootfs才用1
...

文件系統上的其他概念
inode: index node 索引節點
地址指針(直接指針 間接指針 三級指針)

inode bitmap (索引節點位圖) 對位標識每個inode空閑與否的狀態信息

鏈接文件
硬鏈接
不能夠對目錄進行
不能夠跨分區進行
指向同一個inode的多個不同路徑,創建文件的硬鏈接即為inode創建新的引用路徑,因此會增加其引用計數

符號鏈接(軟鏈接)
可以對目錄進行
可以跨分區進行
指向的是另一個文件的路徑,其大小為指向的路徑字符串的長度,不增加或減少目標文件inode的引用計數

ln [-sv] src dest 創建硬鏈接,默認不用帶選項
-s symboic link
-v verbose

[root@localhost ~]# ln -v fstab fstab.hl
`fstab.hl‘ => `fstab‘
[root@localhost ~]# ll fstab*
-rw-r--r--. 2 root root 779 May 21 15:48 fstab
-rw-r--r--. 2 root root 779 May 21 15:48 fstab.hl

[root@localhost ~]# ln -sv fstab fstab.sl
`fstab.sl‘ -> `fstab‘
[root@localhost ~]# ll fstab*
-rw-r--r--. 2 root root 779 May 21 15:48 fstab
lrwxrwxrwx. 1 root root   5 May 21 15:49 fstab.sl -> fstab

練習:
1、創建一個20G的文件系統,塊大小為2048,文件系統為ext4,卷標為test,要求此分區開機後自動掛載至/testing    目錄,且默認有acl掛載選項
mkfs -b 2048 -t ext4 -L ‘test‘ /dev/sdb1
mount -o acl /dev/sdb1 /testing
[root@localhost ~]# grep "testing" /etc/fstab
/dev/sdb1       /testing        ext4    acl     0 0

2、創建一個5G的文件系統,卷標為huge,要求此分區開機自動掛載至/mogdata目錄,文件系統類型為ext3
mkfs -L ‘huge‘ -t ext3 /dev/sdb1
mount /dev/sdb1 /mogdata
[root@localhost ~]# grep "mogdata" /etc/fstab
/dev/sdb1       /mogdata        ext3    defaults    0 0

3、寫一個腳本,完成如下功能
    列出當前系統識別到的所有磁盤設備
    如果磁盤數量為1,則顯示其空間使用信息,否則,則顯示最後一個磁盤上的空間使用信息
    [root@localhost ~]# cat /tmp/disk.sh

#!/bin/bash

fdisk -l

disknum=fdisk -l | grep "^Disk /dev" | wc -l

if [ $disknum -eq 1 ];then
diskfile1=fdisk -l | grep "^Disk /dev" | cut -d‘ ‘ -f2 | grep -o "^/dev\(/[[:alpha:]]\).*\>"
df -h $diskfile1
else
fdisk -l | grep "^Disk /dev" | cut -d‘ ‘ -f2 | grep -o "^/dev(/[[:alpha:]]).*\>" > /tmp/disk.txt
diskfile2=tail -1 /tmp/disk.txt
df -h $diskfile2
fi

bash腳本編程之用戶交互
read [option]... [name...] 用作傳遞變量
-p ‘prompt‘ 提示信息
-t timeout 超時時間

    [root@localhost ~]# read name
    tom
    [root@localhost ~]# echo $name
    tom

    [root@localhost ~]# read a b c
    1 2 3
    [root@localhost ~]# echo $a $b $c
    1 2 3

    [root@localhost ~]# read a b c
    how are you?
    [root@localhost ~]# echo $a
    how
    [root@localhost ~]# echo $b
    are
    [root@localhost ~]# echo $c
    you?

    沒有給出足夠的字段,則靠後的變量為空
    [root@localhost ~]# read a b c
    how are
    [root@localhost ~]# echo $a
    how
    [root@localhost ~]# echo $b
    are
    [root@localhost ~]# echo $c

    如果字段數大於變量數,則多余的字段賦值給最後一個變量
    [root@localhost ~]# read a b c
    how old are you?
    [root@localhost ~]# echo $a
    how
    [root@localhost ~]# echo $b
    old
    [root@localhost ~]# echo $c
    are you?

    -p 選項為輸出提示信息
    [root@localhost ~]# read -p "enter a username:" username
    enter a username:tom
    [root@localhost ~]# echo $username
    tom

    -t 選項為提示超時時間,在超時時間內沒有輸出,變量則為空
    [root@localhost ~]# read -t 5 -p "enter a username:" username
    enter a username:[root@localhost ~]# 
    [root@localhost ~]# echo $username

    [root@localhost ~]# read -t 5 -p "enter a username:" username
    enter a username:allen
    [root@localhost ~]# echo $username
    allen

    bash -n /path/to/some_script
        檢測腳本中的語法錯誤

    bash -x /path/to/some_script
        調試執行 逐步執行

腳本示例
#!/bin/bash
#version
#author
#description

read -p "enter a disk special file:" diskfile
[ -z $diskfile ] && echo "fool" && exit 1

if fdisk -l | grep "^Disk $diskfile" &> /dev/null;then
fdisk -l $diskfile
else
echo "wrong disk special file."
exit 2
fi

raid
redundant arrays of indxpensive disks 廉價冗余磁盤陣列
redundant arrays of independent disks 獨立冗余磁盤陣列

作用:提高IO能力(磁盤並行讀寫)、提高耐用性(磁盤冗余)

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

raid實現的方式
外接式磁盤陣列,通過擴展卡提供適配能力
內接式raid 主板集成raid控制器
software raid 軟件方式實現

raid級別表示磁盤的不同組合方式,用數字表示,如下
raid 0 (條帶卷 strip)
raid 1 (鏡像卷 mirror)
raid 2
...
raid 5
raid 6
raid 10
raid 01

以下是各raid級別的特性
raid 0
連續以位或字節為單位分割數據,並行讀/寫於多個磁盤上,因此具有很高的數據傳輸率,但它沒有數據冗余,因此並不能算是真正的raid結構。raid 0知識單純第提高性能,並沒有為數據的可靠性提供保證,而且其中的一次盤失效將影響到所有數據。因此,raid 0不能應用於數據安全性要求高的場合。
讀寫性能提升
可用空間 n*min(s1,s2...) 取決於容量最小的磁盤,還有磁盤數量
無容錯能力
最少磁盤數 2,2+ (2塊及2塊以上)

raid 1
它是通過磁盤數據鏡像實現數據冗余,在成對的對立磁盤上產生互為備份的數據。當原始數據繁忙時,可直接從鏡像拷貝中讀取數據,因此raid 1可以提高讀取性能。raid 1是磁盤陣列中單位成本最高的,但提供了很高的數據安全性和可用性。當一個磁盤失效時,系統可以自動切換到鏡像磁盤上讀寫,而不需要重組失效的數據。
讀性能提升,寫性能略有下降
可用空間1*min(s1,s2...) 取決於容量最小的磁盤
有冗余能力
最少磁盤數 2,2+ (2塊及2塊以上)

raid 4
raid 4同樣也將數據條帶化並分布於不同的磁盤上,但條帶單位為塊或記錄。raid 4使用一塊磁盤作為奇偶校驗盤,每次寫操作都需要訪問奇偶盤,這時奇偶校驗盤會成為寫操作的瓶頸,因此raid 4在商業環境中也很少使用。
兩塊數據盤 一塊校驗盤(基於或運算)
至少磁盤數 3,3+(3塊及3塊以上)

raid 5
raid 5不單獨指定的奇偶盤,而是在所有磁盤上交叉地存取數據及奇偶校驗信息。在raid 5上,讀/寫指針可同時對陣列設備進行操作,提供了更高的數據流量。raid 5 更適合於小數據和隨機讀寫的數據。
讀寫性能提升
可用空間 (n-1)*min(s1,s2,...) 取決於容量最小的磁盤,還有磁盤的數量
有容錯能力,在組合3塊硬盤的情況下,僅可壞1塊磁盤
最少磁盤數 3,3+ (3塊及3塊以上)

raid 6
與raid 5相比,raid 6增加了第二個獨立的奇偶校驗信息塊。兩個獨立的奇偶系統使用不同的算法,數據的的可靠性非常高,即使兩塊磁盤同時失效也不會影響數據的使用。但raid 6需要分配給奇偶校驗信息更大的磁盤空間。
讀寫性能提升
可用空間(n-2)*min(s1,s2,...) 取決於容量最小的磁盤,還有磁盤的數量
有容錯能力,在組合4塊硬盤的情況下,僅可壞2塊磁盤
最小磁盤數 4,4+ (4塊及4塊以上)

混合類型
raid 10
raid 10其實結構非常簡單,首先創建2個獨立的raid 1,然後將這兩個獨立的raid 1組成一個raid 0,當往這個邏輯raid 0中寫數據時,數據被有序的寫入兩個raid 1中。磁盤1和磁盤2組成一個raid 1,磁盤3和磁盤4又組成另外一個raid 1,這兩個raid 1 組成了一個新的raid 0。如寫在硬盤1上的數據1,3,5,7,寫在硬盤2中則為數據1,3,5,7,硬盤3中的數據為0,2,4,6,硬盤4中的數據則為0,2,4,6,因此數據在這四個硬盤上組合成raid 10,且具有raid 0和raid 1 兩者的特性。

raid 10以raid 0為執行陣列,以raid 1為數據保護陣列,它具有與raid 1一樣的容錯能力,用於容錯處理的系統開銷與單獨的鏡像操作基本一樣,由於使用raid 0作為執行等級,因此具有較高的I/O寬帶,對於那些想在raid 1基礎上大幅提高性能的用戶,它是一個完美的解決方案。raid 10適用於數據庫存儲服務器等需要高性能,高容錯但對容量要求不大的場合。
讀寫性能提升
可用空間 n*min(s1,s2,...)/2 取決於容量最小的磁盤,還有磁盤數量
有容錯能力,每組鏡像最多只能壞1塊
最少磁盤數 4,4+ (4塊及4塊以上 必須是偶數塊)

raid 01、raid 50 raid 7

JBOD just a bunch of disks
功能:將多塊磁盤的空間合並一個大的連續空間使用

常用級別: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 raid 0 raid 1 raid 4 raid 5 raid 6 raid 10

模式:
創建 -C
裝配 -A
監控 -F
管理 -f -r -a

<raiddevice> /dev/md#
<component-devices> 任意塊設備 任意磁盤分區

-C 創建模式
-n # 使用#個塊設備來創建此raid
-l # 指明要創建的raid 級別
-a {yes|no} 自動創建目標raid設備的設備文件
-c chunk_size 指明塊大小
-x # 指明空閑盤的個數

[root@localhost ~]# mdadm -C /dev/md0 -n 3 -l 5 -a yes -c 512 -x 1 /dev/sdb{1,2,3,5}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

例如 創建一個10G可用的raid 5

-D 顯示raid的詳細信息
mdadm -D /dev/md#

[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
                Version : 1.2
    Creation Time : Mon May 28 15:54:18 2018
         Raid Level : raid5
         Array Size : 10401792 (9.92 GiB 10.65 GB)
    Used Dev Size : 5200896 (4.96 GiB 5.33 GB)
     Raid Devices : 3
    Total Devices : 4
        Persistence : Superblock is persistent

        Update Time : Mon May 28 15:55:13 2018
                    State : clean 
 Active Devices : 3
Working Devices : 4
 Failed Devices : 0
    Spare Devices : 1

                 Layout : left-symmetric
         Chunk Size : 512K

                     Name : localhost.localdomain:0  (local to host localhost.localdomain)
                     UUID : f5ecea12:b78a3317:92082083:095814f7
                 Events : 18

        Number   Major   Minor   RaidDevice State
             0       8       17        0      active sync   /dev/sdb1
             1       8       18        1      active sync   /dev/sdb2
             4       8       19        2      active sync   /dev/sdb3

             3       8       21        -      spare   /dev/sdb5

管理模式:
-f 標記指定磁盤為損壞
[root@localhost ~]# mdadm /dev/md0 -f /dev/sdb5
mdadm: set /dev/sdb5 faulty in /dev/md0

-r 移除磁盤
[root@localhost ~]# mdadm /dev/md0 -r /dev/sdb5
mdadm: hot removed /dev/sdb5 from /dev/md0

-a 添加磁盤
[root@localhost ~]# mdadm /dev/md0 -a /dev/sdb5
mdadm: added /dev/sdb5

觀察md的狀態
cat /proc/mdstat
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb53 sdb3[4] sdb2[1] sdb1[0]
10401792 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>

watch命令:
-n# 刷新間隔 單位是秒
watch -n# ‘command’
[root@localhost ~]# watch -n1 ‘cat /proc/mdstat‘

練習1:創建一個可用空間為10G的raid 0設備,要求其chunk大小為128k,文件系統為ext4,有一個空閑盤,開機可自動掛載至/backup目錄

[root@localhost ~]# mdadm -C /dev/md0 -n 2 -l 0 -a yes -c 128 /dev/sdb{1,2}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

[root@localhost ~]# mkfs -t ext4 /dev/md0

[root@localhost ~]# mount /dev/md0 /backup

[root@localhost ~]# grep "backup" /etc/fstab
UUID=0a7d0347-1b81-4bac-af2b-47a4b9748037 /backup ext4 defaults 0 0

練習2:創建一個可用空間為10G的raid 10設備,要求其chunk大小為256k,文件系統為ext4,開機可自動掛載至/mydata目錄

[root@localhost ~]# mdadm -C /dev/md0 -n 4 -l 10 -a yes -c 256 /dev/sdb{1,2,3,5}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

[root@localhost ~]# mkfs -t ext4 /dev/md0

[root@localhost ~]# mount /dev/md0 /mydata

[root@localhost ~]# grep "mydata" /etc/fstab
UUID=17c2420f-9ea7-453c-bc7d-b0b87b363b18 /mydata ext4 defaults 0 0

lvm2
lvm logical volume manager version 2 邏輯卷管理器

內核模塊 dm device mapper 將一個或多個底層塊設備組織成一個邏輯設備的模塊(/dev/dm-#)

/dev/mapper/vg_name-lv_name
/dev/mapper/myvg-mylv <-- /dev/vg_name/lv_name(/dev/myvg/mylv) 後者為鏈接文件

pv管理工具
pvs 簡要pv信息顯示
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 VolGroup lvm2 a--u 19.51g 0

pvdisplay 顯示pv的詳細信息
[root@localhost ~]# pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name VolGroup
PV Size 19.51 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4994
Free PE 0
Allocated PE 4994
PV UUID QcPKeC-S2FO-QMMn-ZaVT-aqAE-5BaG-zZH9IK

pvcreate /dev/device 創建pv
[root@localhost ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created

vg管理工具
vgs 簡要vg信息顯示
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
VolGroup 1 2 0 wz--n- 19.51g 0

vgdisplay 顯示vg的詳細信息
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name VolGroup
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 19.51 GiB
PE Size 4.00 MiB
Total PE 4994
Alloc PE / Size 4994 / 19.51 GiB
Free PE / Size 0 / 0
VG UUID WlXRlE-ytaQ-x8U0-zQcC-KnEz-VS6m-dfGE0s

vgcreate [-s #[kKmMgGtTpPeE]] 指定pe大小 volumegroupname physicaldevicepath [physicaldevicepath...] 創建vg
[root@localhost ~]# vgcreate myvg /dev/sdb1
Volume group "myvg" successfully created

[root@localhost ~]# vgcreate -s 8M mylv /dev/sdb1
Volume group "mylv" successfully created

vgextend volumegroupname physicaldevicepath [physicaldevicepath...] 擴展vg
[root@localhost ~]# vgextend myvg /dev/sdb2
Volume group "myvg" successfully extended

vgreduce volumegroupname physicaldevicepath [physicaldevicepath...] 縮減vg
先做pvmove
[root@localhost ~]# pvmove /dev/sdb2
No data to move for myvg
[root@localhost ~]# vgreduce myvg /dev/sdb2
Removed "/dev/sdb2" from volume group "myvg"

vgremove volumegroupname 刪除vg
[root@localhost ~]# vgremove myvg
Volume group "myvg" successfully removed

lv管理工具
lvs 簡要lv信息顯示
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_root VolGroup -wi-ao---- 18.57g
lv_swap VolGroup -wi-ao---- 960.00m

lvdisplay 顯示lv的詳細信息
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/VolGroup/lv_root
LV Name lv_root
VG Name VolGroup
LV UUID 0lIuzI-Yc6X-UCB1-Nv9B-LWv1-FrUE-uguRMA
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2018-05-26 23:27:17 +0800
LV Status available
#open 1
LV Size 18.57 GiB
Current LE 4754
Segments 1
Allocation inherit
Read ahead sectors auto

  • currently set to 256
    Block device 253:0

    --- Logical volume ---
    LV Path /dev/VolGroup/lv_swap
    LV Name lv_swap
    VG Name VolGroup
    LV UUID 5U3Eu5-OVRJ-b37u-pllp-SXYm-eaTP-vmosNB
    LV Write Access read/write
    LV Creation host, time localhost.localdomain, 2018-05-26 23:27:18 +0800
    LV Status available
    #open 1
    LV Size 960.00 MiB
    Current LE 240
    Segments 1
    Allocation inherit
    Read ahead sectors auto

  • currently set to 256
    Block device 253:1

lvcreate -L #[mMgGtT] -n name volumegroup 創建lv
[root@localhost ~]# lvcreate -L 5G -n mylv myvg
Logical volume "mylv" created.

lvremove /dev/vg_name/lv_name 刪除lv
[root@localhost ~]# lvremove /dev/myvg/mylv
Do you really want to remove active logical volume mylv? [y/n]: y
Logical volume "mylv" successfully removed

擴展邏輯卷
lvextend -L [+]#[mMgGtT] /dev/vg_name/lv_name
resize2fs /dev/vg_name/lv_name
[root@localhost ~]# lvextend -L 10G /dev/myvg/mylv
Size of logical volume myvg/mylv changed from 5.00 GiB (1280 extents) to 10.00 GiB (2560 extents).
Logical volume mylv successfully resized.

[root@localhost ~]# resize2fs /dev/myvg/mylv
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/mylv is mounted on /backup; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/myvg/mylv to 2621440 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 2621440 blocks long.

縮減邏輯卷
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 /dev/vg_name/lv_name

[root@localhost ~]# umount /dev/myvg/mylv
[root@localhost ~]# e2fsck -f /dev/myvg//mylv
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/myvg//mylv: 14/655360 files (0.0% non-contiguous), 76786/2621440 blocks
[root@localhost ~]# resize2fs /dev/myvg/mylv 5G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/myvg/mylv to 1310720 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 1310720 blocks long.
[root@localhost ~]# lvreduce -L 5G /dev/myvg/mylv
WARNING: Reducing active logical volume to 5.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce myvg/mylv? [y/n]: y
Size of logical volume myvg/mylv changed from 10.00 GiB (2560 extents) to 5.00 GiB (1280 extents).
Logical volume mylv successfully resized.
[root@localhost ~]# mount /dev/myvg/mylv /backup

快照:snapshot
lvcreate -L #[mMgGtT] -p(權限) r(只讀) -s(快照) -n(名字) snapshot_lv_name original_lv_name
[root@localhost mydata]# lvcreate -L 1G -p r -s -n mylv-snap /dev/myvg/mylv
Logical volume "mylv-snap" created.

[root@localhost mydata]# mount /dev/myvg/mylv-snap /mydata
創建快照卷後,無須格式化,直接掛載

練習1:創建一個至少有兩個pv組成的大小為20G的名為testvg的vg,要求pe大小為16mb,而後在卷組中創建大小為5g的邏輯卷testlv,掛載至/users目錄;
[root@localhost ~]# pvcreate /dev/sdb{1,2}
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sdb2" successfully created

[root@localhost ~]# vgcreate -s 16m testvg /dev/sdb{1,2}
Volume group "testvg" successfully created

[root@localhost ~]# lvcreate -L 5g -n testlv testvg
Logical volume "testlv" created.

[root@localhost ~]# mke2fs /dev/testvg/testlv

[root@localhost ~]# mount /dev/testvg/testlv /users

練習2:新建用戶archlinux,要求其家目錄為/users/archlinux,而後su切換至archlinux用戶,復制/etc/pam.d目錄至自己的家目錄;
[root@localhost ~]# useradd -d /users/archlinux archlinux

[root@localhost ~]# su - archlinux
[archlinux@localhost ~]$ pwd
/users/archlinux

[archlinux@localhost ~]$ cp -r /etc/pam.d /users/archlinux
[archlinux@localhost ~]$ ll /users/archlinux
total 8
drwxr-xr-x. 2 archlinux archlinux 4096 May 29 17:12 pam.d

練習3:擴展testlv至7g,要求archlinux用戶的文件不能丟失;
[root@localhost ~]# lvextend -L 7g /dev/testvg/testlv
Size of logical volume testvg/testlv changed from 5.00 GiB (320 extents) to 7.00 GiB (448 extents).
Logical volume testlv successfully resized.

[root@localhost ~]# resize2fs /dev/testvg/testlv
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/testvg/testlv is mounted on /users; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/testvg/testlv to 1835008 (4k) blocks.
The filesystem on /dev/testvg/testlv is now 1835008 blocks long.

[root@localhost ~]# ll /users/archlinux/
total 4
drwxr-xr-x. 2 archlinux archlinux 4096 May 29 17:23 pam.d

練習4:收縮testlv至3g,要求archlinux用戶的文件不能丟失;
[root@localhost ~]# umount /dev/testvg/testlv

[root@localhost ~]# e2fsck -f /dev/testvg/testlv

[root@localhost ~]# resize2fs /dev/testvg/testlv 3g

[root@localhost ~]# lvreduce -L 3g /dev/testvg/testlv

[root@localhost ~]# mount /dev/testvg/testlv /users

[root@localhost ~]# ll /users/archlinux
total 4
drwxr-xr-x. 2 archlinux archlinux 4096 May 29 17:23 pam.d

練習5:對testlv創建快照,並嘗試基於快照備份數據,驗證快照的功能;
[root@localhost ~]# lvcreate -L 1g -p rw -s -n testlv-snap /dev/testvg/testlv
Logical volume "testlv-snap" created.

[root@localhost ~]# mount /dev/testvg/testlv-snap /users-snap

[root@localhost ~]# ll /users-snap/
total 20
drwx------. 3 archlinux archlinux 4096 May 29 17:24 archlinux
drwx------. 2 root root 16384 May 29 17:21 lost+found

文件系統掛載使用
掛載光盤設備
光盤設備文件
ide /dev/hdc
sata /dev/sr0

符號鏈接文件
/dev/cdrom
/dev/cdrw
/dev/dvd
/dev/dvdrw

mount -r /dev/cdrom /media
umount /dev/cdrom

dd命令 convert and copy a file
用法 dd if=/path/frome/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
dd if=/dev/zero of=/dev/sda bs=512 count=1

兩個特殊設備
/dev/null 數據黑洞
/dev/zero 吐零機

文件系統掛載、ext文件系統及read命令、Linux RAID、lvm應用