Linux作業7

1、創建一個10G分區,並格式爲ext4文件系統;

   (1) 要求其block大小爲2048, 預留空間百分比爲2, 卷標爲MYDATA, 默認掛載屬性包含acl;

   (2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳;

    1、創建分區;

    使用fdisk命令在磁盤/dev/sdb上創建分區,過程如下:

    wKiom1fXpwvSDnjSAAFYnce2uPQ167.png


    2、格式化分區;

    使用mke2fs命令將/dev/sdb1格式爲ext4文件系統:

    mke2fs命令選項說明:

        -t:指定文件系統;

      -b:指定磁盤塊大小,單位爲字節;

      -m:指定爲管理人員預留的空間佔據的百分比;爲避免空間耗盡導致管理操作(mv、cp等)無法完成,可使用該參數指定一定比例的預留空間,默認5%;

      -L:指定卷標;

    wKiom1fXujbgSIkVAACmUfWZD6k345.png


    CentOS7中格式化分區時默認已經包含acl掛載選項,可通過tune2fs -l命令進行查看,如下:

    wKiom1fXvVuyOX81AAGE0duk4RI706.png

    如果不包含,可通過tune2fs命令選項來修改默認的掛載屬性,如下:

    tune2fs -o {FEATURE|^FEATURE}

      FEATURE:啓用默認屬性

      ^FEATURE:禁用默認屬性

    wKioL1fXvvewbSjvAADwvuc3U6k896.png

   

    3、掛載文件系統

    使用mount命令掛載文件系統,過程如下:

    1).創建文件系統掛載目錄,即掛載點;

    2).使用mount命令進行掛載,並使用-o來啓用或禁用文件系統選項;

        mount文件系統選項說明:

        noexec: 不允許文件系統上的文件運行爲進程,即使文件有執行權限;

        noatime:在訪問文件或目錄時不更新其訪問時間戳,以減少磁盤I/O; 

    3).驗證;   

    wKiom1fXzRGiG9neAAA8KxGUw5A528.png

    

2、創建一個大小爲1G的swap分區,並創建好文件系統,並啓用之;

    1). 使用free命令查看下當前的swap空間大小:

    wKioL1fYu_fyfBteAAAbVS6Kfsk206.png


    2). 使用fdisk命令創建一個分區,並修改該分區ID爲82(82爲swap文件系統的ID,默認爲83):

    wKiom1fYvhGA-fTwAAD5psxW_x4107.png

    

 使用partx命令通知kernel重讀磁盤分區表,選項說明如下:

    -a: 通知kernel添加制定或全部分區

    -v: verbose,顯示詳細信息

    -s: 列出分區

 wKiom1fYxQzizJgeAABUt-5lulE812.png


    3). 使用mkswap命令將分區格式化爲swap文件系統:

    wKioL1fYv8KDybWGAAAc_mp6xoU757.png


    4). 使用swapon命令激活swap交換分區:

        swapon命令常用選項說明:

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

        -v: verbose,顯示詳細信息;

        -s, --summary: 顯示摘要信息;

        -p, --priority <prio>: 指定交換分區設備的優先級;

        wKioL1fY36SAE-DHAAAoIBGhNkw973.png


    5). 驗證:

    wKioL1fY3_zw8zAZAAA4Vc0BDPk911.png

    可使用swapon -s或free -m命令驗證結果。 


3、寫一個腳本

   (1)、獲取並列出當前系統上的所有磁盤設備;

#!/bin/bash
#
echo "$(fdisk -l /dev/[sh]d[a-z] | grep -o '^Disk /dev/[sh]d[a-z]')"

 結果:

 wKioL1fZHqKw2w7yAAAMSKVTwqA427.png

   (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

 結果:

   wKioL1fZIQThyEOfAACfaIWn4Vs800.png

4、總結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


5、創建一個大小爲10G的RAID1,要求有一個空閒盤,而且CHUNK大小爲128k;

  1). 創建三個大小爲10G的分區,用來模擬三塊磁盤(RAID-1至少需要2塊磁盤,1塊用來模擬空閒盤)

    wKioL1fjp2iCSz35AAInsGBTKcM054.png


  通知kernel重讀磁盤分區表:

    wKioL1fjqfyQyhRYAABCjCLnKHM499.png

    

  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

    wKiom1fkxr6wT_Q7AAEKWgp21MY051.png

   對齊成功後:

    wKiom1fkxr-iaTJgAADB6LdPEF8991.png


 3). 使用RAID:

  (1).格式化。將/dev/md0格式化爲ext4文件系統,並指明卷標爲“MD0”:

    wKiom1fkyXPSciTxAACgIvyfT9g292.png


  (2).掛載。將/dev/md0掛載至/mydata,並檢查掛載狀態:

    wKiom1fkypmQlx3YAACJ1K4e7s8594.png


 4). 模擬磁盤故障:

    將/dev/sdb1人工標記爲故障,來模擬磁盤錯誤,並觀察空閒磁塊的狀態:

    wKioL1fkzzqjA-1PAADZx6dd6oA553.png


    卸載故障磁盤:

    wKiom1fk0JKDdoIDAACns3m1Ui8299.png

    

    向RAID卷中添加塊設備/dev/sdb1:

    wKiom1fk0Sfy-M4PAACrgB0bE4g963.png


 5). 拆除RAID卷:

    拆除RAID前需先卸載該RAID:

    wKiom1fk1mWS8nFpAAAiT6n8fAY067.png


    

6、創建一個大小爲4G的RAID5設備,chunk大小爲256k,格式化ext4文件系統,要求可開機自動掛載至/backup目錄,而且不更新訪問時間戳,且支持acl功能;

  1). 創建四個大小爲4G的分區(/dev/sdb{5,6,7,8}),用來模擬組建RAID卷的磁盤設備,其三個作爲數據盤,一個作爲空閒盤:

    wKioL1fk4ImC1Yj8AACoMKx2VyQ792.png   


  2). 創建RAID-5,chunk爲256K:

    wKioL1fk4rPy4Rf1AAD_rUKAg8s554.png


  3). 格式化RAID設備爲ext4文件系統,指明卷標,並檢查默認掛載屬性:

    wKioL1fk6BmBjNhiAAEWWSdPDqM541.png


  4). 修改/etc/fstab文件:

    /etc/fstab文件中增加一行,使用卷標自動掛載RAID設備,並使用noatime參數。如下:

LABEL=MD0   /mydata     ext4    defaults,noatime,acl    0 0

 運行以下命令,根據/etc/fstab掛載設備:

# mount -a


  5). 查看掛載狀態:

    wKiom1fk7QeTQIeIAAAUH1-PX-g362.png


7、寫一個腳本

   (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"

     結果:

    wKioL1favLeQe1mrAACzxnXEIzU004.png

8、寫一個腳本

   (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"

     結果:

    wKiom1faxp_yYEW4AAA423X7Lcg247.png


9、寫一個腳本,新建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"

    結果:

    wKiom1fk9-mRZlfmAACnASECkvY446.png


10、寫一腳本,分別統計/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"

    結果:

    wKiom1flBgKATNNiAAA_zjGMOBg740.png

11、寫一個腳本,顯示當前系統上所有默認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"

    結果:

    wKiom1flQvywsLlRAABAHJY39jQ594.png


12、寫一個腳本,顯示當前系統上所有,擁有附加組的用戶的用戶名;並說明共有多少個此類用戶;

#!/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"

    結果:

    wKiom1flTWaQu5xHAABc4pJ1e7o409.png


13、創建一個由至少兩個物理卷組成的大小爲20G的卷組;要求,PE大小爲8M;而在卷組中創建一個大小爲5G的邏輯卷mylv1,格式化爲ext4文件系統,開機自動掛載至/users目錄,支持acl;

    1). 創建磁盤塊。創建/dev/sdb{1,2,3}並調整分區ID爲8e,用來模擬構成PV的磁盤塊:

        wKiom1fmgVfRcFXdAACoT3dTmv0957.png


    2). 創建PV;

        使用pvcreate命令創建PV,使用pvs命令顯示pv列表:

        wKioL1fmh2LwHdrEAABJtYSdZzs496.png


    3). 創建VG;

        創建vg命令:vgcreate  [-s #[kKmMgGtTpPeE]] VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath...]

            -s: 指定PE的大小

        顯示vg詳情:vgdisplay [VolumeGroupName]

        wKioL1fmi5CQmLT5AADWSuFonfo815.png


    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:

            wKioL1fmjo_AbdcTAADRgoN8OsY508.png


    5). 格式化LV,並檢查默認掛載選項;

        將/dev/mapper/myvg-mylv1格式化爲ext4文件系統:

        wKiom1fmkQnh-xHtAAEpEfKARi4401.png


    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

    結果:

    wKioL1fmk2zha2JKAAAj95LxwRg751.png


14、新建用戶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 .


15、擴展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]

    wKiom1fmmIaTR4VoAAFHSjx_0Og898.png

    檢查源數據是否可用:

    wKiom1fmmkCyjOkIAAC5iPQ9034960.png

16、縮減mylv1至7G,確保縮減完成後原有數據完全可用;

    收縮LV需經過以下步驟:

        1). 卸載文件。收縮LV不允許在線運行;

        2). 收縮前強制檢查LV;

        3). 收縮LV前需使用resize2fs命令收縮LV上的文件系統。注意:必須保證收縮後的空間可以存下該LV下的所有數據;

        4). 使用lvreduce命令收縮LV至指定大小,空間大小的指定也可使用相對值,如:-2G;

        5). 收縮LV後重新掛載該LV;

        6). 檢查數據是否可用;

    過程如下:

        wKiom1fmnXnxYowbAAHGnPvf_m4261.png


17、對mylv1創建快照,並通過備份數據;要求保留原有的屬主屬組等信息;

    LV快照說明:

  1.         對LV創建的快照可以保存LV在某一核的所有信息,包換狀態信息和數據;

  2.         快照的大小可以於LV相同也可不同,這取決於快照的使用期限,當對LV創建快照時相當於創建了一個LV上元數據的監聽器,當LV上數據更新時會首先將LV中的數據複製一份到快照後再對LV上的數據進行修改,在讀取數據時會先檢查快照中是否有數據,有則讀取,沒有則會讀取與之對應的LV上的數據,此時快照相當於LV的另一個入口;

  3.         LV和與之對應的快照必須在同一個卷組(VG)中;

  4.         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創建快照並檢查快照信息:            

        wKiom1fmr5Tg5bf1AAEgSFRKH-E402.png

    

    查看LV上的元數據信息,修改後再與快照上同文件元數據對比:    

        wKioL1fmr3XAiEYCAAG1v7dVA84891.png




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章