馬哥2016全新Linux+Python高端運維班第七週作業

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

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

答:①首先創建分區,命令如下:(注:僅展示命令,其中一些細節已省略)

[root@csd ~]# fdisk /dev/sdc           ##選擇要分區的設備

Command (m for help): n             ##“n”表示新建一個分區
Command action                   ##選擇分區的類型,主分區或擴展分區
   e   extended
   p   primary partition (1-4)
e
Partition number (1-4): 1            ##選擇編號,範圍1-4
First cylinder (1-2610, default 1):         ##起始扇區,可使用默認值
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): 10G  ##結束扇區,可使用容量單位K,M,G

Command (m for help): n             ##由於擴展區無法直接使用,我們要再新建邏輯扇區
Command action                   ##選擇分區類型
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (1-10, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-10, default 10):   ##選擇大小,默認則分配全部擴展空間
Using default value 10

Command (m for help): w               ##保存退出
The partition table has been altered!
如圖所示:

wKiom1fdCgiyJqh6AAXZ3VZgKRQ695.jpg

②使用mke2fs將劃分的邏輯分區轉換成ext4格式,且block大小爲2048, 預留空間百分比爲2, 卷標爲MYDATA,命令如下:

[root@csd ~]# mke2fs -t ext4 -b 2048 -m 2 -L 'MYDATA' /dev/sdc5
##-t:設定文件格式
  -b:指定block塊大小
  -m #:爲管理人員預留的空間佔據的百分比,#爲數字,代表百分之多少
  -L:設定卷標

如圖所示:


wKioL1fdEoOSyQXyAABWA7_XTuY210.png

③修改其默掛載屬性,可使用tune2fs實現,命令如下:

[root@csd ~]# tune2fs -o acl /dev/sdc5     ##-o選項爲修改默認掛載項
tune2fs 1.41.12 (17-May-2010)

結果如下:

wKioL1fdE8aAKbTEAAKgq5ZAwnA988.jpg

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

答:掛載使用mount命令來實現,命令如下:

[root@csd ~]# mount -o nodiratime,noexec -L MYDATA /data/mydata
##"-o options":掛載文件系統的選項;-o後面選項可有多個,用逗號隔開
##diratime/nodiratime:每一次訪問是否更新目錄文件的訪問時間戳
##exec/noexec:是否支持將文件系統上的應用程序運行爲進程

結果如下:

wKioL1fdFnbRKYCHAAH0SXjtuyE268.jpg

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

答:首先創建一個1G的的分區,並修改爲swap文件系統,如下:

wKiom1fdHeHTCUVzAAQ4Zk7CP-Q170.jpg然後創建swap並啓用,命令如下

[root@csd ~]# mkswap /dev/sdb5                  ##創建swap
Setting up swapspace version 1, size = 7964 KiB
no label, UUID=b7841e4a-adfc-4b3e-a092-e89b9ac8121e
[root@csd ~]# swapon /dev/sdb5                  ##啓用swap

結果如下:

wKioL1fdHsGSIAc8AADTgBB-eAs042.jpg

3、寫一個腳本

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

(2)、顯示每個磁盤設備上每個分區相關的空間使用信息;

答:腳本如下

#!/bin/bash
echo "當前系統上的磁盤設備:"
fdisk -l | egrep "^Disk[[:space:]]/dev"       ##"fdisk -l" 查看當前系統磁盤信息,然後篩選以"Disk /dev"開頭的行
echo "各分區使用情況:"
df -h | grep "^/dev*"                ##"df -h"查看當前各分區使用狀況,然後篩選以"/dev"開頭的行

結果如下:

wKiom1feg12CEA7jAAGaK0KOTkI159.jpg

4、總結RAID的各個級別及其組合方式和性能的不同;

答:

RAID-0:

讀寫性能提升;可用空間:N*min(s1,s2.....);N硬盤個數;min最小的空間

無容錯能力;最少磁盤數:2,2+

RAID-1:

讀性能提升、寫性能略有下降;可用空間:1*min(S1,S2.....);

有冗餘能力,最少磁盤數:2,2+

RAID-5:

讀寫性能提升;可用空間(N-1)*min(s1,s2....);有容錯能力:1塊磁盤

最少磁盤數:3,3+1

RAID-6:

讀寫性能提升;可用空間(N-2)*min(s1,s2....);

有容錯能力:2塊磁盤;最少磁盤數:4,4+

混合型RAID

RAID-10:

讀寫性能提升;可用空間:N*min(s1,s2....)/2

有容錯能力:每組鏡像最多隻能壞一塊;最少磁盤數:4,4+

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

答:RAID1要求最少2塊硬盤,由於還要一個空閒盤,所以總共使用3塊硬盤創建;首先在3塊硬盤中創建一個10G空間,以/dev/sda爲例:

[root@csd ~]# fdisk /dev/sda

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n       ##新建一個分區
Command action
   e   extended
   p   primary partition (1-4)
e                    ##由於我的硬盤已有三個分區,所以我把剩餘的全部分成擴展分區
Selected partition 4
First cylinder (1428-3916, default 1428): 
Using default value 1428
Last cylinder, +cylinders or +size{K,M,G} (1428-3916, default 3916): 
Using default value 3916

Command (m for help): n       ##新建一個10G的分區做RAID使用
First cylinder (1428-3916, default 1428): 
Using default value 1428
Last cylinder, +cylinders or +size{K,M,G} (1428-3916, default 3916): +10G

Command (m for help): t       ##調整分區ID
Partition number (1-5): 5     ##新的10G分區爲5,所以選擇5
Hex code (type L to list codes): fd    ##調整分區ID爲fd
Changed system type of partition 5 to fd (Linux raid autodetect)

Command (m for help): p       ##查看所有分區情況

Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0002784f

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26        1301    10240000   83  Linux
/dev/sda3            1301        1428     1024000   82  Linux swap / Solaris
/dev/sda4            1428        3916    19985446    5  Extended
/dev/sda5            1428        2733    10482967   fd  Linux raid autodetect

Command (m for help): wq      ##保存退出
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: 設備或資源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

分區創建結果如下:

wKioL1fejkSiqnioAAYaPK-xUfY510.jpg

創建RAID0:

[root@csd ~]# mdadm -C /dev/md0 -a yes -n 2 -l 1 -c 128 -x 1 /dev/sda5 /dev/sdb5 /dev/sdc5
##註釋:
##-C:創建模式
##-n #:使用#個塊設備來創建此RAID;
##-l #:指明要創建的RAID級別;
##-a {yes|no}:自動創建目標RAID設備的設備文件;
##-c CHUNK_SIZE:指明塊大小;
##-x #:指明空閒盤的個數;
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
mdadm: /dev/sdc5 appears to contain an ext2fs file system
    size=80260K  mtime=Sun Sep 11 22:12:49 2016
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

結果如下:

wKioL1felHvwzmFjAAQo10QctSk555.jpg

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

答:創建3個2G分區,raid5的可用空間爲(N-1)*min(s1,s2....)

wKioL1femyWhA-E1AAZbPXFZ7Yg100.jpg

創建raid5:

[root@csd ~]# mdadm -C /dev/md0 -l 5 -a yes --chunk=256 -n 3 /dev/sda5 /dev/sdb5 /dev/sdc5
mdadm: /dev/sdc5 appears to contain an ext2fs file system
    size=80260K  mtime=Sun Sep 11 22:12:49 2016
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

結果如下:

wKiom1fen3Cg51lRAATYPC0p0Lc583.jpg

掛載過程:

[root@csd ~]# mke2fs -t ext4 /dev/md0    ##將md0格式化爲ext4

wKiom1feoF_iFzTZAAPuwHGrYGU610.jpg

[root@csd ~]# mount /dev/md0 -o auto,noatime,acl /backup  ##掛載至/backup

wKioL1feorLTyG22AAHTBLgAa1E060.jpg

編輯/etc/fstab,開機自動掛載

wKiom1fepUzA5R0wAAMwWcRa1SE783.jpg

結果如下:

wKiom1feplmgZsCTAATVlfZAL94036.jpg

7、寫一個腳本

(1) 接受一個以上文件路徑作爲參數;

(2) 顯示每個文件擁有的行數;

(3) 總結說明本次共爲幾個文件統計了其行數;

答:腳本代碼如下:

#!/bin/bash
if [ $# -eq 0 ];then               ##“$#”傳遞給腳本的參數個數,“if”來判斷路徑不爲空
echo "至少需要一個文件路徑!"      
exit 1
fi
for i in $*;do                     ##“$*”傳遞給腳本所有參數;(調用時將所有參數當獨立字符串)
echo "$i 文件行數爲:$(cat $i | wc -l) 行"   ##統計給出的各個文件路徑
done
echo "本次統計 $# 個文件"

結果如下:

wKiom1fesGWBP_gaAADy27LgUfQ032.jpg

8、寫一個腳本

(1) 傳遞兩個以上字符串當作用戶名;

(2) 創建這些用戶;且密碼同用戶名;

(3) 總結說明共創建了幾個用戶;

答:腳本代碼如下:

#!/bin/bash
for n in $*;do                            ##使用for循環來判斷每一個用戶名是否低於或等於2個字符串
if [ $(echo "$n" | wc -c) -le 3 ];then    ##判斷條件
echo "用戶名不得低於2個字符串"
exit 1
elif
id $n >> /dev/null;then                   ##判斷此用戶名是否存在
echo "用戶名$n 已存在"
exit 1
else                                      ##若用戶名不存在且是兩個字符串以上,創建用戶名
useradd $n                                   
echo "$n" | passwd --stdin $n >> /dev/null      ##修改用戶的密碼同用戶名
echo "用戶$n 已添加,密碼同用戶名,請及時修改!"
fi
done
echo "本次添加$# 個用戶"                   ##統計添加了多少個用戶

結果如下:

用戶名已存在的情況

wKiom1fevZShU72OAABfkY85We8291.jpg

用戶名低於2個字符串的情況

wKioL1feve-irb7_AADMYl4tFKE788.jpg

符合所有條件的情況

wKioL1fevnvx8AXzAAFfPn4uC8E911.jpg

9、寫一個腳本,新建20個用戶,visitor1-visitor20;計算他們的ID之和;

答:腳本代碼如下:

#!/bin/bash

export sum=0                          ##定義一個變量,後期求ID和用
for i in {1..20};do                   ##循環次數
if [ id visitor$i ] &> /dev/null ;then    ##測試要添加的用戶是否已存在,若存在則中斷
echo "用戶visitor$i 已存在" 
exit 1
else
useradd visitor$i >> /dev/null        ##添加用戶
echo "用戶visitor$i 已添加"           
let sum+=$(id -u visitor$i)           ##計算ID之和
fi
done
echo "所添加用戶的UID之和爲:$sum"

結果如下:

wKiom1ffsQmCVbpNAAJ4HnKna2w227.jpg

10、寫一腳本,分別統計/etc/rc.d/rc.sysinit、/etc/rc.d/init.d/functions和/etc/fstab文件中以#號開頭的行數之和,以及總的空白行數;

答:腳本代碼如下:

#!/bin/bash

export sum1=0              ##求以#開頭行數之和用
export sp=0                ##求以空格開頭行數之和用
for i in $#;do             ##循環次數
let sum1+=$(cat $* | grep -o "^#.*" | wc -l)   ##找出文件中以#開頭的行數並求和
let sp+=$(cat $* | egrep -o "^[[:space:]].*" | wc -l)  ##找出文件中以空格開頭的行數並求和
done
echo "給出的文檔中以#開頭的行數和爲:$sum1"      
echo "給出的文檔中以空格開頭的行數和爲:$sp"

結果如下:

wKioL1ffth_CdskzAADvgrX8uwg994.jpg

給出的文件中以#開頭的行數:

wKioL1fftmrCF88HAAE7LVaej48048.jpg

給出的文件中以空格開頭的行數:

wKioL1fftrvCarmUAAErAMkcx6I581.jpg

11、寫一個腳本,顯示當前系統上所有默認shell爲bash的用戶的用戶名、UID以及此類所有用戶的UID之和;

答:腳本代碼如下:

#!/bin/bash

export sum=0           ##用於求UID之和用
cat /etc/passwd | egrep "bash$" | cut -d: -f1,3,7  ##顯示默認shell爲bash的信息
for i in $(cat /etc/passwd | egrep "bash$" | cut -d: -f3);do  ##循環次數
let sum+=$i            ##求UID之和
done
echo "以上UID之和爲:$sum"

結果如下:

wKioL1ffvVrSFS4wAAXi_ljPoMw404.jpg

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

答:腳本代碼如下:

#!/bin/bash

export sum=0                  ##用作計算符合條件用戶名數量
for i in $(cat /etc/passwd | cut -d: -f1);do   ##循環次數,循環列表爲所有用戶名
if [ $(groups $i | wc -w) -gt 3 ];then         ##對用戶名進行group查看,如果有多餘的附加組,則統計後的單詞數會大於3
echo "$(groups $i)"           ##顯示出擁有附加組的用戶名
let sum+=1                    ##累計計算次數
fi
done
echo "此類用戶共有$sum 個"

結果如下:

wKioL1ffyRLhoG7WAAE1XkDFlOM978.jpg

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

答:創建2個10G分區,修改格式爲8e(以/dev/sdb爲例)

[root@csd ~]# fdisk /dev/sdb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (1-2610, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +10G

Command (m for help): t
Partition number (1-5): 5
Hex code (type L to list codes): 8e
Changed system type of partition 5 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0002784f

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26        1301    10240000   83  Linux
/dev/sda3            1301        1428     1024000   82  Linux swap / Solaris
/dev/sda4            1428        3916    19985446    5  Extended
/dev/sda5            1428        2733    10482967   8e  Linux LVM

Command (m for help): wq
The partition table has been altered!

創建PV:

wKiom1ffze6DzGi6AAG78CyioYw119.jpg

創建GV:

[root@csd ~]# vgcreate -s 8m myvg /dev/sda5 /dev/sdb5   ##"-s"選項爲定義PE大小
  Volume group "myvg" successfully created

wKioL1ff0DDz53kuAAIaI90-nLU784.jpg

創建LV:

[root@csd ~]# lvcreate -L 5G -n mylv1 myvg
  Logical volume "mylv1" created

wKiom1ff0MySxuMdAAIAiKU4D18171.jpg

格式化mylv1:

wKiom1ff0ZWgLZlgAAQxuo1iYzI065.jpg

掛載至/users,支持acl:

wKiom1ff06WhScyaAAI7z0SAinc621.jpg

設置開機自動掛載,支持acl:

wKioL1ff02TTD9foAAMtvoORHCI533.jpg

14、新建用戶magedu;其家目錄爲/users/magedu,而後su切換至此用戶,複製多個文件至家目錄;

答:

[root@csd /]# useradd -d /users/magedu magedu
[magedu@csd etc]$ cp /etc/i* /users/magedu/

wKioL1ff1pPwN-KPAAK9kyI68ck966.jpg

15、擴展mylv1至9G,確保擴展完成後原有數據完全可用;

答:

[root@csd /]# lvextend -L +4G /dev/myvg/mylv1      ##擴展物理邊界
  Extending logical volume mylv1 to 9.00 GiB
  Logical volume mylv1 successfully resized
[root@csd /]# resize2fs /dev/myvg/mylv1            ##擴展邏輯邊界
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/mylv1 is mounted on /users; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/myvg/mylv1 to 2359296 (4k) blocks.
The filesystem on /dev/myvg/mylv1 is now 2359296 blocks long.

結果如下:

wKiom1ff1-bgk6uwAAK9kyI68ck845.jpg

擴展後數據情況:

wKioL1ff2DLBF-bKAACfyxovOXM817.jpg

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

答:

[root@csd ~]# umount /dev/myvg/mylv1            ##先卸載此卷
[root@csd ~]# e2fsck -f /dev/myvg/mylv1         ##進行文件系統強制檢測 
e2fsck 1.41.12 (17-May-2010)
第一步: 檢查inode,塊,和大小
第二步: 檢查目錄結構
第3步: 檢查目錄連接性
Pass 4: Checking reference counts
第5步: 檢查簇概要信息
/dev/myvg/mylv1: 25/589824 files (0.0% non-contiguous), 72685/2359296 blocks
[root@csd ~]# resize2fs /dev/myvg/mylv1 
resize2fs 1.41.12 (17-May-2010)
The filesystem is already 2359296 blocks long.  Nothing to do!
[root@csd ~]# resize2fs  /dev/myvg/mylv1 7G      ##必須先縮減邏輯邊界
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/myvg/mylv1 to 1835008 (4k) blocks.
The filesystem on /dev/myvg/mylv1 is now 1835008 blocks long.
[root@csd ~]# lvreduce -L -2G /dev/myvg/mylv1    ##縮減物理邊界
  WARNING: Reducing active logical volume to 7.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv1? [y/n]: y
  Reducing logical volume mylv1 to 7.00 GiB
  Logical volume mylv1 successfully resized

結果如下:

wKiom1ff5fmQ6ADhAAKr5U-c1Ag078.jpg

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

答:

[root@csd ~]# lvcreate -L 1G -s -n mylv101 /dev/myvg/mylv1 
  Logical volume "mylv101" created

結果如下:

wKiom1ff6AXCFeoaAAK-3p63uyU689.jpg

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