一、建立一個10G分區,並格式爲ext4文件系統;git
(1) 要求其block大小爲2048, 預留空間百分比爲2, 卷標爲MYDATA, 默認掛載屬性包含acl;shell
(2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳;vim
一、建立分區;
bash
使用fdisk命令在磁盤/dev/sdb上建立分區,過程以下:app
二、格式化分區;
ide
使用mke2fs命令將/dev/sdb1格式爲ext4文件系統:性能
mke2fs命令選項說明:ui
-t:指定文件系統;
spa
-b:指定磁盤塊大小,單位爲字節;
3d
-m:指定爲管理人員預留的空間佔據的百分比;爲避免空間耗盡致使管理操做(mv、cp等)沒法完成,可以使用該參數指定必定比例的預留空間,默認5%;
-L:指定卷標;
CentOS7中格式化分區時默認已經包含acl掛載選項,可經過tune2fs -l命令進行查看,以下:
若是不包含,可經過tune2fs命令選項來修改默認的掛載屬性,以下:
tune2fs -o {FEATURE|^FEATURE}
FEATURE:啓用默認屬性
^FEATURE:禁用默認屬性
三、掛載文件系統
使用mount命令掛載文件系統,過程以下:
1).建立文件系統掛載目錄,即掛載點;
2).使用mount命令進行掛載,並使用-o來啓用或禁用文件系統選項;
mount文件系統選項說明:
noexec: 不容許文件系統上的文件運行爲進程,即便文件有執行權限;
noatime:在訪問文件或目錄時不更新其訪問時間戳,以減小磁盤I/O;
3).驗證;
二、建立一個大小爲1G的swap分區,並建立好文件系統,並啓用之;
1). 使用free命令查看下當前的swap空間大小:
2). 使用fdisk命令建立一個分區,並修改該分區ID爲82(82爲swap文件系統的ID,默認爲83):
使用partx命令通知kernel重讀磁盤分區表,選項說明以下:
-a: 通知kernel添加制定或所有分區
-v: verbose,顯示詳細信息
-s: 列出分區
3). 使用mkswap命令將分區格式化爲swap文件系統:
4). 使用swapon命令激活swap交換分區:
swapon命令經常使用選項說明:
-a: 激活全部的交換分區;
-v: verbose,顯示詳細信息;
-s, --summary: 顯示摘要信息;
-p, --priority <prio>: 指定交換分區設備的優先級;
5). 驗證:
可以使用swapon -s或free -m命令驗證結果。
三、寫一個腳本
(1)、獲取並列出當前系統上的全部磁盤設備;
#!/bin/bash # echo "$(fdisk -l /dev/[sh]d[a-z] | grep -o '^Disk /dev/[sh]d[a-z]')"
結果:
(2)、顯示每一個磁盤設備上每一個分區相關的空間使用信息;
#!/bin/bash # diskDev=$(fdisk -l /dev/[sh]d[a-z] | grep -o '^/dev/[sh]d[a-z][[:digit:]]') for i in $diskDev do echo "$(fdisk -l $i)\n" done
結果:
四、總結RAID的各個級別及其組合方式和性能的不一樣;
經常使用RAID級別及說明以下表:
RAID級別 | 描述 | 性能 | 冗餘 | 可用空間 | 最少磁盤數 |
RAID-0 | 被稱爲條帶卷(strip);將多塊磁盤並行組織起來,將數據條帶化後切割爲多段(chunk),平均同時存往各磁盤,讀取數據時也從多塊磁盤讀取數據後再在RAID控制器的組織下組合爲完整的數據; | 讀、寫性能均有提高 | 無容錯能力,且風險率會隨磁盤個數的增長而增加 | N*min(S1,S2,...) 磁盤個數*最小磁盤可用空間 |
2 |
RAID-1 | 被稱爲鏡像卷(mirror);將多塊磁盤並行組織起來,數據chunk在多塊磁盤各寫一份,讀取時分別從各磁盤讀取; | 讀性能提高,寫性能略有降低 | 有 | 1*min(S1,S2,…) 由最小可用空間的磁盤決定 |
2 |
RAID-4 不經常使用 |
磁盤分兩類,一類用來存儲數據,另外一類用來存儲校驗碼(數據磁盤的異或值)。校驗碼磁盤至少有一塊,數據chunk以條帶方式存儲到各數據磁盤上,同時計算出數據的異或值並存儲於校驗磁盤; | 讀寫性能有提高,但更換磁盤後數據恢復時校驗盤會成爲瓶頸 | 有,容許壞1塊磁盤 | (N-1)*min(S1,S2,…) 數據磁盤個數*最小磁盤的可用空間 |
3 |
RAID-5 | 與RAID-4相似,不一樣之處爲各磁盤輪流做爲校驗磁盤; | 讀、寫性能均有提高 | 有,容許壞1塊磁盤 | (N-1)*min(S1,S2,…) 數據磁盤個數*最小磁盤的可用空間 |
|
RAID-6 不經常使用 |
與RAID-5相似,不一樣之處爲同時由2塊磁盤輪流做爲校驗盤; | 讀、寫性能均有提高 | 有,容許壞2塊磁盤 | (N-2)*min(S1,S2,…) | 4 |
RAID-10 | 多塊磁盤先組織爲RAID-1,再將多組磁盤鏡像組織爲RAID-0,即先鏡像再條帶; | 讀、寫性能均有提高 | 有,每組鏡像最多同時只能壞一塊 | N*min(S1,S2,...)/2 全部最小磁盤空間數量的一半 |
4 |
RAID-01 不經常使用 |
與RAID-10相反,多塊磁盤先組織爲條帶,多組磁盤條帶再組織爲鏡像; | 讀、寫性能均有提高 | 有,同時只能有一個條帶組出現故障,哪怕整個條帶組的全部磁盤都出故障; | N*min(S1,S2,...)/2 全部最小磁盤空間數量的一半 |
4 |
JBOD | 將多塊磁盤的可用空間串行組織爲一個大的連續空間; | 無 | 無容錯能力,且風險率會隨磁盤個數的增長而增加 | sum(S1,S2,…) | N |
五、建立一個大小爲10G的RAID1,要求有一個空閒盤,並且CHUNK大小爲128k;
1). 建立三個大小爲10G的分區,用來模擬三塊磁盤(RAID-1至少須要2塊磁盤,1塊用來模擬空閒盤):
通知kernel重讀磁盤分區表:
2). 建立RAID:
Linux下的軟RAID是經過kernel的md模塊來實現的,mdadm命令爲kernel的md模塊的管理命令,其經常使用選項及相關參數以下:
語法格式:mdadm [mode] <raiddevice> [options] <component-devices>
模式:
建立:-C
-n #: 使用#個塊設備來建立此RAID;
-l #:指明要建立的RAID的級別,mdadm支持的RAID級別:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10;;
-a {yes|no}:自動建立目標RAID設備的設備文件;
-c CHUNK_SIZE: 指明塊大小;
-x #: 指明空閒盤的個數;
裝配: -A
監控: -F
管理:
-f:將磁盤人工標記爲損壞(faulty)
-r:將塊設備從RAID卷中移除
-a:向RAID卷中添加塊設備
-S, --stop:拆除RAID卷,釋放全部塊設備
# mdadm -C /dev/md0 -a yes -l 1 -n 2 -x 1 -c 128 /dev/sdb{1,2,3}
檢查RAID設備狀態,帶有冗餘功能的RAID在建立後須要作按位對齊,使得某磁盤在損壞後能夠恢復:
檢查命令: mdadm -D 或 cat /proc/mdstat
對齊成功後:
3). 使用RAID:
(1).格式化。將/dev/md0格式化爲ext4文件系統,並指明卷標爲「MD0」:
(2).掛載。將/dev/md0掛載至/mydata,並檢查掛載狀態:
4). 模擬磁盤故障:
將/dev/sdb1人工標記爲故障,來模擬磁盤錯誤,並觀察空閒磁塊的狀態:
卸載故障磁盤:
向RAID卷中添加塊設備/dev/sdb1:
5). 拆除RAID卷:
拆除RAID前需先卸載該RAID:
六、建立一個大小爲4G的RAID5設備,chunk大小爲256k,格式化ext4文件系統,要求可開機自動掛載至/backup目錄,並且不更新訪問時間戳,且支持acl功能;
1). 建立四個大小爲4G的分區(/dev/sdb{5,6,7,8}),用來模擬組建RAID卷的磁盤設備,其三個做爲數據盤,一個做爲空閒盤:
2). 建立RAID-5,chunk爲256K:
3). 格式化RAID設備爲ext4文件系統,指明卷標,並檢查默認掛載屬性:
4). 修改/etc/fstab文件:
/etc/fstab文件中增長一行,使用卷標自動掛載RAID設備,並使用noatime參數。以下:
LABEL=MD0 /mydata ext4 defaults,noatime,acl 0 0
運行如下命令,根據/etc/fstab掛載設備:
# mount -a
5). 查看掛載狀態:
七、寫一個腳本
(1) 接受一個以上文件路徑做爲參數;
(2) 顯示每一個文件擁有的行數;
(3) 總結說明本次共爲幾個文件統計了其行數;
#!/bin/bash # if [ $# -eq 0 ];then echo "Parameters cannot be empty!" exit 1 fi fileCount=0 for i in $@ do if [ -f $i ] then linecount=($(wc -l $i)) echo "$i has $linecount lines." let fileCount++ else echo "$i not be regular file!" fi done echo -e "Counted files: $fileCount \n"
結果:
八、寫一個腳本
(1) 傳遞兩個以上字符串看成用戶名;
(2) 建立這些用戶;且密碼同用戶名;
(3) 總結說明共建立了幾個用戶;
#/bin/bash # if [ ! $UID -eq 0 ] then echo "Please login root." exit 1 fi if [ $# -eq 0 ] then echo -e "Parameters cannot be empty!\n" fi userCount=0 for user in $@ do if id $user &> /dev/null then echo "$user already exists." else useradd $user [ $? -eq 0 ] && echo "$user" | passwd --stdin $user > /dev/null || echo -e "$user not created!\n" echo "$user to create success!" let userCount++ fi done echo -e "Total of created user: $userCount\n"
結果:
九、寫一個腳本,新建20個用戶,visitor1-visitor20;計算他們的ID之和;
#/bin/bash # declare -i userNum=1 declare -i sumUID=0 while [ $userNum -le 20 ] ; do if id visitor$userNum &> /dev/null ; then echo "visitor$userNum already existing!" else useradd visitor$userNum &> /dev/null && echo "visitor$userNum" | passwd --stdin visitor$userNum &> /dev/null [ $? -eq 0 ] && echo "visitor$userNum created successfully." || echo "visitor$userNum Chris create failure!" fi echo "visitor$userNum UID is: $(id -u visitor$userNum)" let sumUID+=$(id -u visitor$userNum) let userNum++ done echo "The sum of the UID: $sumUID"
結果:
十、寫一腳本,分別統計/etc/rc.d/rc.sysinit、/etc/rc.d/init.d/functions和/etc/fstab文件中以#號開頭的行數之和,以及總的空白行數;
#/bin/bash # declare -i sum1=0 # Sum for # lines declare -i sum2=0 # Sum for null lines for file in $@; do if [ -f $file ]; then s1=$(grep '^#' $file | wc -l) s2=$(grep '^$' $file | wc -l) echo "$file # lines: $s1" echo "$file null lines: $s2" sum1+=s1 sum2+=s2 else echo "$file not found or not text file!" fi done echo -e "\nTotal # lines: $sum1" echo "Total null lines: $sum2"
結果:
十一、寫一個腳本,顯示當前系統上全部默認shell爲bash的用戶的用戶名、UID以及此類全部用戶的UID之和;
#!/bin/bash # userList=$(grep '\/bin\/bash$' /etc/passwd) declare -i sumUID=0 for user in $userList ; do userName=$(echo $user | cut -d: -f1) uid=$(echo $user | cut -d: -f3) echo -e "User: $userName\tUID: $uid" let sumUID+=$uid done echo "Sum UID: $sumUID"
結果:
十二、寫一個腳本,顯示當前系統上全部,擁有附加組的用戶的用戶名;並說明共有多少個此類用戶;
#!/bin/bash # allUsername=$(cut -d: -f1 /etc/passwd) declare -i sumSG=0 echo 'There are supplementary groups of user: ' for user in $allUsername; do if id $user | grep ',' &> /dev/null ; then echo -n "$user " let sumSG++ fi done echo -e "\nSum users: $sumSG"
結果:
1三、建立一個由至少兩個物理卷組成的大小爲20G的卷組;要求,PE大小爲8M;而在卷組中建立一個大小爲5G的邏輯卷mylv1,格式化爲ext4文件系統,開機自動掛載至/users目錄,支持acl;
1). 建立磁盤塊。建立/dev/sdb{1,2,3}並調整分區ID爲8e,用來模擬構成PV的磁盤塊:
2). 建立PV;
使用pvcreate命令建立PV,使用pvs命令顯示pv列表:
3). 建立VG;
建立vg命令:vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
-s: 指定PE的大小
顯示vg詳情:vgdisplay [VolumeGroupName]
4). 建立LV;
LV建立命令:lvcreate -L #[mMgGtT] -n NAME VolumeGroup
-L: 指定LV的大小;
-n: 批定LV的名稱;
LV查看命令:lvdisplay [-a|--all] [-v|--verbose] [VolumeGroupName|LogicalVolume{Name|Path} ...]
建立大小爲5G的邏輯卷mylv1:
5). 格式化LV,並檢查默認掛載選項;
將/dev/mapper/myvg-mylv1格式化爲ext4文件系統:
6). 建立/users掛載點,修改/etc/fstab使LV自動掛載,並啓用acl功能:
# mkdir -v /users mkdir: created directory ‘/users’ # blkid /dev/mapper/myvg-mylv1 /dev/mapper/myvg-mylv1: UUID="18c0e102-3072-4b5f-96c8-6c914169ae71" TYPE="ext4" # vim /etc/fstab UUID=18c0e102-3072-4b5f-96c8-6c914169ae71 /users ext4 defaults,acl 0 0 #在/etc/fstab文件中添加該行 # mount -a
結果:
1四、新建用戶magedu;其家目錄爲/users/magedu,然後su切換至此用戶,複製多個文件至家目錄;
[root@C1 ~]# useradd -d /users/magedu magedu [root@C1 ~]# su - magedu [magedu@C1 ~]$ pwd /users/magedu [magedu@C1 ~]$ cp /etc/fstab /etc/hosts .
1五、擴展mylv1至9G,確保擴展完成後原有數據徹底可用;
擴展LV分區須要兩步:
1). 使用lvextend命令擴展LV;
# lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
2). 使用resize2fs命令擴展邏輯捲上的文件系統,當不指定[NEW_SIZE]時表明擴展至最大;
# resize2fs /dev/VG_NAME/LV_NAME [NEW_SIZE]
檢查源數據是否可用:
1六、縮減mylv1至7G,確保縮減完成後原有數據徹底可用;
收縮LV需通過如下步驟:
1). 卸載文件。收縮LV不容許在線運行;
2). 收縮前強制檢查LV;
3). 收縮LV前需使用resize2fs命令收縮LV上的文件系統。注意:必須保證收縮後的空間能夠存下該LV下的全部數據;
4). 使用lvreduce命令收縮LV至指定大小,空間大小的指定也可以使用相對值,如:-2G;
5). 收縮LV後從新掛載該LV;
6). 檢查數據是否可用;
過程以下:
1七、對mylv1建立快照,並經過備份數據;要求保留原有的屬主屬組等信息;
LV快照說明:
對LV建立的快照能夠保存LV在某一核的全部信息,包換狀態信息和數據;
快照的大小能夠於LV相同也可不一樣,這取決於快照的使用期限,當對LV建立快照時至關於建立了一個LV上元數據的監聽器,當LV上數據更新時會首先將LV中的數據複製一份到快照後再對LV上的數據進行修改,在讀取數據時會先檢查快照中是否有數據,有則讀取,沒有則會讀取與之對應的LV上的數據,此時快照至關於LV的另外一個入口;
LV和與之對應的快照必須在同一個卷組(VG)中;
LV的快照能夠單獨掛載;
LV快照建立命令:
lvcreate -s -L #[mMgGtT] -p r -n snapshot_lv_name original_lv_name
-s|--snapshot: 指明建立快照;
-L|--size: 指定快照大小;
-p|--permission {r|rw}: 指定快照是否可寫,一般快照爲只讀;
-n|--name SnapshotLogicalVolume{Name|Path}: 指定快照名;
對mylv1建立快照並檢查快照信息:
查看LV上的元數據信息,修改後再與快照上同文件元數據對比: