磁盤的性能
1.定位 2.旋轉 3.命令隊列 4.數據庫傳輸
HBA:基於主機的適配器
RAID:Redundent Array of Inexpensive Disks 廉價磁盤陣列
Independent 獨立磁盤陣列
Level:僅用於標識磁盤組合方式的不同,不能取代數據備份
raid0:提高讀寫性能,沒有容錯能力。至少需要兩塊磁盤 100% raid1:至少需要兩塊硬盤,鏡像,硬件容錯能力,讀性能提升,寫性能下降 50% raid4:至少需要三塊硬盤,允許一塊盤出錯,讀寫性能提升,(n-1)/n raid5: 至少需要三塊硬盤,允許一塊盤出錯,讀寫性能提升,(n-1)/n raid6: 至少需要四塊磁盤,允許兩塊盤出錯。讀寫性能提升,(n-2)/n raid10:至少需要四塊磁盤。允許不同組內個各壞一塊盤,讀寫性能提升,50% raid01: jbod:兩個盤結合起來當一個盤用,寫完一個盤寫另外一個。
命令的配置文件: mdadm,/etc/mdadm.conf
mdadm:模式化的工具
-A Assemble 裝配模式 -C Create 創建模式 -n #:用於創建RAID設備的個數 -x #: 熱備磁盤的個數 -l :指定RAID級別 -a :=yes(自動為創建的RAID設備創建設備文件) md mdp part p 如何創建設備文件 -c:指定塊的大小,默認為512KB -F FOLLOW 監控 -S 停止RAID -D --detail: 顯示陣列詳細信息
創建一個大小為12G的RAID0:2*6G,3*4G 4*3G 6*2G
mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb{1,2}
watch ‘’
-n #:每個#執行一次指定的命令,單位為s
問題一:mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sdb{1,2}
mdadm: cannot open /dev/sdb1: Device or resource busy
練習:創建一個大小為4G的RAID5,要求直接具有一個空閒盤
for循環
for varName in 列表;do 循環體 done
條件測試:
執行條件:命令成功,條件測試成功;否則為失敗 根據$?,狀態返回值
表達式:
[ expreession ] [[ expression ]] test expression
while循環
while 條件測試:do 循環體 done
如何退出?
必須有時刻,條件測試不成功 ? :條件控制變量
練習:求100以內所有正整數的和
sum=0 i=1 while [ $i -le 100 ];do let sum+=$i let i++ done echo $sum
練習:通過鍵盤提示用戶輸入字符,將用戶輸入的小寫字母轉換為大寫,轉換之後,再次提醒,再輸再轉換;再輸入quit退出
while [[ "$word" != "quit" ]];do echo $word | tr "a-z" "A-z" read -p "Enter a word again:" word done
until :
bash編程之until循環; until 測試條件;do 循環體 done 條件不滿足,則循環;否則,退出
bash編程之組合測試條件深入
邏輯與:多個條件同時滿足
[ 條件1 ] && [ 條件2 ] [ 條件1 -a 條件2 ] [[ 條件1 && 條件2 ]] 注意:前兩個使用單雙中括號都可,但&&不允許用於單個中括號中,所有第三者只能用於雙中括號中
邏輯或:多個條件滿足一個
[ 條件1 ] || [ 條件2 ] [ 條件1 -o 條件2 ] [[ 條件1 || 條件2 ]] 注意 || 不允許出現在單中括號中
得摩根 定律
!(條件1或者 條件2) = !條件1 並且!條件2 !(條件1且條件2)=!條件1 或者 !條件2
練習:提示用戶輸入一個用戶名,如果存在,顯示用戶UID和SHELL信息,如果不存在,顯示無此用戶;顯示完成之後,提示用戶再次輸入,如果是quit則退出
#!/bin/bash # read -p "Enter input name:" username while [[ $username != "quit" ]];do if id $username &>/dev/null;then grep "^$username\>" /etc/passwd | cut -d: -f3,7 else echo "No such user." fi read -p "Enter a user name again(quit to exit):" username done
練習:提供用戶輸入一個用戶名,判斷用戶是否登錄了當前系統;如果沒有登錄則停止5秒之後再次判斷,直到用戶登錄系統,顯示用戶來了,而後退出
#!/bin/bash # read -p "Enter a user name :" userName while ! id $userName &> /dev/null;do read -p "Enter a user name again :" userName done who | grep "^$userName" &>/dev/null retVal=$? while [ $retVal -ne 0 ];do sleep 5 who | grep "^$userName" &>/dev/null retVal=$? done echo "$userName is on"
練習:寫一個腳本,完成如下任務
1.提示用戶輸入一個磁盤設備文件路徑不存在或不是一個塊設備,則提示用戶重新輸入,知道輸入正確為止,或者輸入quit以9為退出碼結束腳本
2.提示用戶”下面的操作會清空磁盤的數據,並提問是否繼續”
如果用戶給出字符y或yes,則繼續,否則,則提供以8為退出碼結束腳本
3、將用戶指定的磁盤上的分區清空,而後創建兩個分區,大小分別為100M和512M
4格式化這兩個分區
5將第一個分區掛載至/mnt/boot目錄,第二個分區掛載至/mnt/sysroot目錄
#!/bin/bash read -p "Enter you dev " devdir umonut /mnt/boot umonut /mnt/sysroot while [[ "$devdir" != "quit" ]];do [ -a $devdir ] && [ -b $devdir ] if [[ $? -eq 0 ]];then read -p "Are you sure[y|yes]: " option if [[ "$option" == "y" || "$option" == "yes" ]];then dd if=/dev/zero of=$devdir bs=512 count=1 &> /dev/null echo -e "n\np\n1\n\n+100M\nn\np\n2\n\n+512M\nw" |fdisk $devdir mke2fs -t ext4 ${devdir}1 mke2fs -t ext4 ${devdir}2 mount ${devdir}1 /mnt/boot mount ${devdir}2 /mnt/sysroot echo "${devdir}1 /mnt/boot ext4 default 0 0" >> /etc/fstab echo "${devdir}2 /mnt/sysroot ext4 default 0 0" >> /etc/fstab exit 7 else exit 8 fi else read -p "Enter you dev again: " devdir fi done
設備文件
/dev/卷組名/邏輯卷名 /dev/mapper/卷組名-邏輯卷名
物理卷命令命令:pv
pvcreate pvremove psdisplay pvscan pvs pvmove(移動數據) pvcreate 物理卷
卷組的管理命令:vg
vgcreate vgscan vgs vgextend(擴充)、vgremove(刪除) vgreduce(移除,縮容) vgcreate -s:pe大小,默認4M
邏輯卷的管理命令:lv
lvcreate lvscan lvs lvextend(擴充)、lvremove(刪除) vgreduce(移除,縮容) lvcreate -n:指定名稱 -L: 指定大小 -l:%vg|pvs|FREE,打算分配%
1.先確保擴展的大小;並確保所屬的卷組有足夠的剩余空間 2、擴展物理邊界 lvextend -L [+]size /path/to/lv_device 3、擴展邏輯邊界 resize2fs /path/to/lv_devive
1、卸載卷,並執行強制檢查 e2fsck -f /path/to/lv_devive 2、縮減邏輯邊界 resize2fs /path/to/lv_device SIZE 3、縮減物理邊界: lvreduce -L [-]size /path/to/lv_device 4、掛載卷
也是邏輯卷的一種,提供過去某一時間的元卷的通道 lvcreate -s -L Size -n name 卷組名 -p r,rw /path/to/lv_devsive -p:訪問權限
擴展卷組:
1.准備要添加的物理卷 2 擴展卷組: 添加物理卷至卷組中 vgextend vg_name /path/to/device
縮減卷組:
1.確定要移除的物理卷的總空間大小,要小於VG當前的可用空間大小 2.將要移除的物理卷上的所有pe移動至其他PV pvmove /path/to/pv_device 3.縮減vg #vgreduce vg_name /path/to/pv/device
練習:
1、創建一個由兩個物理卷組成大小為20G的卷組myvg,要求PE大小16M;而後新建 大小為7G邏輯卷mylv1,要求其文件系統為ext4,塊大小為2048,且開機能自動掛載至/users;
pvcreate /dev/sdb{5,6},vgcreate -s 16M myvg /dev/sdb{5,6},mke2fs -t ext4 -b 2048 /dev/myvg/mylv1
2、新建用戶openstack,其家目錄為/users/openstack,而後切換至openstack用戶,復制一些文件至其家目錄中;
3、縮減mylv1至5G大小;而後切換至openstack用戶,確保其數據沒有丟失;
e2fsck -f /dev/myvg/mylv1 resize2fs /dev/myvg/mylv1 5G lvreduce -L 5G /dev/myvg/mylv1
4、對mylv1創建快照卷snap-mylv1,並通過其備份數據至/tmp/user.tar.bz2;
lvcreate -s -n snap-mylv1 -L 200M /dev/myvg/mylv1 tar -jcf /tmp/user.tar.bz2 /tmp/*