歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Linux學習日志(七)

RAID

磁盤的性能

   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:兩個盤結合起來當一個盤用,寫完一個盤寫另外一個。

md,可以組合任何塊設備

 命令的配置文件: 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,要求直接具有一個空閒盤

bash知識點:while循環和until循環

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

LVM:Logical Volume Manager,將多塊設備組合成一個來使用

設備文件

     /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/*
Copyright © Linux教程網 All Rights Reserved