第七周
1,創建一個10G分區,并格式化為ext4文件系統;
(1) 要求其block大小為2048,預留空間百分比為2,卷標為MYDATA,默認掛載屬性包含acl;
(2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳;
[root@www ~]# fdisk /dev/sda <-------------fdisk命令創建10G分區 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 First cylinder (6814-15665, default 6814): Using default value 6814 Last cylinder, +cylinders or +size{K,M,G} (6814-15665, default 15665): +10G Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. 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. [root@www ~]# partx -a /dev/sda <----------------partx命令讓kernel讀取新建的分區信息 BLKPG: Device or resource busy error adding partition 1 BLKPG: Device or resource busy error adding partition 2 BLKPG: Device or resource busy error adding partition 3 BLKPG: Device or resource busy error adding partition 4 BLKPG: Device or resource busy error adding partition 5 [root@www ~]# mke2fs -t ext4 -b 2048 -L MYDATA -m 2 /dev/sda5 <------------按要求創建文件系統 mke2fs 1.41.12 (17-May-2010) Filesystem label=MYDATA OS type: Linux Block size=2048 (log=1) Fragment size=2048 (log=1) Stride=0 blocks, Stripe width=0 blocks 655360 inodes, 5242030 blocks 104840 blocks (2.00%) reserved for the super user First data block=0 Maximum filesystem blocks=542113792 320 block groups 16384 blocks per group, 16384 fragments per group 2048 inodes per group Superblock backups stored on blocks: 16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816, 1327104, 2048000, 3981312 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 28 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. [root@www ~]# tune2fs -o acl /dev/sda5 <---------------------用tune2fs修改默認掛載屬性包含acl tune2fs 1.41.12 (17-May-2010) [root@www ~]# tune2fs -l /dev/sda5 <---------------------用tune2fs驗證結果 tune2fs 1.41.12 (17-May-2010) Filesystem volume name: MYDATA Last mounted on: <not available> Filesystem UUID: 1b73355f-b889-4bfb-840e-5102f10d65cf Filesystem magic number: 0xEF53 Filesystem revision #: 1 (dynamic) Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize Filesystem flags: signed_directory_hash Default mount options: acl <---------------------默認掛載選項已修改包含acl Filesystem state: clean Errors behavior: Continue Filesystem OS type: Linux Inode count: 655360 Block count: 5242030 Reserved block count: 104840 Free blocks: 5120476 Free inodes: 655349 First block: 0 Block size: 2048 Fragment size: 2048 Reserved GDT blocks: 512 Blocks per group: 16384 Fragments per group: 16384 Inodes per group: 2048 Inode blocks per group: 256 Flex block group size: 16 Filesystem created: Sat Sep 2 20:08:23 2017 Last mount time: n/a Last write time: Sat Sep 2 20:09:36 2017 Mount count: 0 Maximum mount count: 28 Last checked: Sat Sep 2 20:08:23 2017 Check interval: 15552000 (6 months) Next check after: Thu Mar 1 20:08:23 2018 Lifetime writes: 225 MB Reserved blocks uid: 0 (user root) Reserved blocks gid: 0 (group root) First inode: 11 Inode size: 256 Required extra isize: 28 Desired extra isize: 28 Journal inode: 8 Default directory hash: half_md4 Directory Hash Seed: bd60bce1-1bf1-4db7-af63-032fa657b0d0 Journal backup: inode blocks [root@www ~]# mkdir -pv /data/mydata <----------------------創建mydata目錄 mkdir: created directory `/data' mkdir: created directory `/data/mydata' [root@www ~]# mount -t ext4 -o noexec,noatime /dev/sda5 /data/mydata <---------掛載文件系統至mydata目錄 [root@www ~]# mount <-------------用mount命令驗證結果 /dev/sda2 on / type ext4 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0") /dev/sda1 on /boot type ext4 (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) /dev/sda5 on /data/mydata type ext4 (rw,noexec,noatime) <---------------掛載后帶有noexec和noatime屬性
注意:如要讓新建的文件系統重啟后自動掛載,需添加如下內容至/etc/fstab文件中;
LABEL=MYDATA /data/mydata ext4 defaults,acl,noexec,noatime 0 0
/etc/fstab文件分6個字段:
a. 要掛載的設備,可用設備文件,LABEL名或UUID;如示例中用LABEL=MYDATA
b. 掛載點;如示例中/data/mydata
c. 文件系統類型,如示例中ext4;
d. 掛載選項;默認defaults,如選項有多個,彼此間用逗號“,”分隔;
e. 備份頻率,0為不備份,1為每天備份,2為隔天備份;
f. 系統啟動是是否自檢,0為不自檢,1為優先自檢,2為次級優先自檢;
2,創建一個大小為1G的swap分區,并創建好文件系統,并啟用之;
[root@www ~]# fdisk /dev/sda <-------------fdisk命令創建1G分區 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 First cylinder (8120-15665, default 8120): Using default value 8120 Last cylinder, +cylinders or +size{K,M,G} (8120-15665, default 15665): +1G Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. 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. [root@www ~]# partx -a /dev/sda <----------------partx命令讓kernel讀取新建的分區信息 BLKPG: Device or resource busy error adding partition 1 BLKPG: Device or resource busy error adding partition 2 BLKPG: Device or resource busy error adding partition 3 BLKPG: Device or resource busy error adding partition 4 BLKPG: Device or resource busy error adding partition 5 BLKPG: Device or resource busy error adding partition 6 [root@www ~]# mkswap /dev/sda6 <------------------mkswap命令創建swap分區 Setting up swapspace version 1, size = 1060252 KiB no label, UUID=3fdbb6e2-5e02-4139-b141-3f49ad4b37fd [root@www ~]# blkid <------------------blkid命令查看所有文件系統 /dev/sda1: UUID="8631ceb8-a29c-4205-99fa-947bd93ec3a5" TYPE="ext4" /dev/sda2: UUID="c5e05cf4-7e32-402e-aefa-1353baf6df38" TYPE="ext4" /dev/sda3: UUID="f3e097ca-bd89-451e-8f35-fb0c31e07c6c" TYPE="swap" /dev/sda5: LABEL="MYDATA" UUID="1b73355f-b889-4bfb-840e-5102f10d65cf" TYPE="ext4" /dev/sda6: UUID="3fdbb6e2-5e02-4139-b141-3f49ad4b37fd" TYPE="swap" <-------------新建的swap分區 [root@www ~]# swapon /dev/sda6 <---------------------啟用swap分區 [root@www ~]# swapon -s <---------------------驗證swap是否啟用 Filename Type Size Used Priority /dev/sda3 partition 2097148 0 -1 /dev/sda6 partition 1060252 0 -2
注意:注意:如要讓新建的文件系統重啟后自動掛載,需添加如下內容至/etc/fstab文件中;關于/etc/fstab文件中的字段在上文中已有解釋,在此不再贅述。
UUID=3fdbb6e2-5e02-4139-b141-3f49ad4b37fd swap swap defaults 0 0
3,寫一個腳本
(1),獲取并列出當前系統上的所有磁盤設備;
(2),顯示每個磁盤設備上每個分區相關的空間使用信息;
[root@www ~]# cat diskinfo.sh #!/bin/bash fdisk -l <-------------------------fdisk -l列出系統上所有磁盤設備 for par in $(fdisk -l | grep "^/dev/[sh]d[a-z][0-9]" | cut -d' ' -f1); do <---用命令引用的結果當作列表作為變量par的值 df -h $par <-------------------------df -h查看每個列表中分區的空間使用信息 done [root@www ~]# bash diskinfo.sh Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0x33239dbf Device Boot Start End Blocks Id System /dev/sdb1 1 1306 10490413+ 83 Linux /dev/sdb4 1307 2610 10474380 5 Extended /dev/sdb5 1307 2610 10474348+ 83 Linux Disk /dev/sda: 128.8 GB, 128849018880 bytes 255 heads, 63 sectors/track, 15665 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: 0x000ca814 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 6553 52428800 83 Linux /dev/sda3 6553 6814 2097152 82 Linux swap / Solaris /dev/sda4 6814 15665 71097336+ 5 Extended /dev/sda5 6814 8119 10484060 83 Linux /dev/sda6 8120 8251 1060258+ 83 Linux Filesystem Size Used Avail Use% Mounted on /dev/sdb1 9.8G 23M 9.3G 1% /mnt/sdb1 Filesystem Size Used Avail Use% Mounted on - 476M 220K 476M 1% /dev Filesystem Size Used Avail Use% Mounted on /dev/sdb5 9.8G 23M 9.2G 1% /mnt/sdb5 Filesystem Size Used Avail Use% Mounted on /dev/sda1 190M 36M 145M 20% /boot Filesystem Size Used Avail Use% Mounted on /dev/sda2 50G 2.3G 45G 5% / Filesystem Size Used Avail Use% Mounted on - 476M 220K 476M 1% /dev Filesystem Size Used Avail Use% Mounted on - 476M 220K 476M 1% /dev Filesystem Size Used Avail Use% Mounted on - 476M 220K 476M 1% /dev Filesystem Size Used Avail Use% Mounted on - 476M 220K 476M 1% /dev
4,總結RAID的各個級別及其組合方式和性能的不同。
4.1,何為RAID?
RAID (Redundant Arrays of Independent Disks),獨立磁盤構成的具有冗余能力的陣列,簡稱磁盤陣列。磁盤陣列由多塊磁盤,以硬件RAID卡或軟件形成組合成一個容量巨大的磁盤組,利用不同raid組合磁盤的方式,提升整個磁盤系統的效能。利用這項技術,將數據切割成許多區段,分別放在各個硬盤上。磁盤陣列還能利用同位校驗(Parity Check)的觀念,在數組中任意一個硬盤故障時,任可讀出數據,在數據重建時,將數據經計算后重新置入新硬盤中。
注意:雖然RAID可以預防數據丟失,但并不完全保證數據不會丟失,RAID不能代替數據備份。
4.2,RAID級別
RAID 0
實現RAID 0至少需要兩塊以上磁盤,它將兩塊以上的磁盤合并成一塊,數據連續地分割在每塊盤上??捎萌萘渴嵌鄩K磁盤的容量總和,因為帶寬加倍,所以讀/寫速度加倍,但RAID 0在提高性能的同時,沒有數據冗余,沒有數據校驗的功能,即沒有提供數據保護功能,只要任何一塊磁盤損壞就會丟失所有數據。因此RAID 0不可應用于需要數據高可用性的關鍵領域。
RAID 1
是由多塊磁盤所構成的磁盤陣列,其容量等于一塊磁盤的容量,因為其他的磁盤當作數據“鏡像”,所以RAID 1又稱為鏡像卷。RAID 1的寫入數據速度較慢,因為被分割的數據區段需要存在陣列上的每一塊磁盤上。RAID 1有數據冗余和校驗的功能,即提供了數據保護功能,任何一塊磁盤損壞都不會導致丟失數據。RAID 1磁盤陣列主要用在數據安全性要求高且能夠快速恢復被破壞數據的場合。
RAID 5
是一個存儲性能,數據安全和存儲成本兼顧的存儲解決方案。它可以為系統系統安全保障,但保障程度要比鏡像卷低而磁盤空間利用率比鏡像卷高。RAID 5磁盤陣列至少需要3塊磁盤組成,其容量等于n-1塊磁盤。RAID 5具有和RAID 0相近似的數據讀取速度,只是多了奇偶校驗信息,寫入數據的速度比對單個磁盤進行寫入操作稍慢。RAID 5是一種數據安全,I/O速度的權衡與存儲成本較低的解決方案。但是由于其工作方式的原因,在大于4Tb的場合下,磁盤故障發生后,數據重建的難度將大大增加。所以存儲行業并不建議使用RAID5。
RAID 6
是在RAID 5基礎上,為了進一步加強數據保護而設計的一種RAID方式。與RAID 5的不同之處于除了每個硬盤上都有同級數據XOR校驗區外,還有一個針對每個數據塊的XOR校驗區。當然,當前盤數據塊的校驗數據不可能存在當前盤而是交錯存儲的,這樣一來,等于每個數據塊有了兩個校驗保護屏障(一個分層校驗,一個是總體校驗),因此RAID 6的數據冗余性能相當好。但是,由于增加了一個校驗,所以寫入的效率較RAID 5還差,而且控制系統的設計也更為復雜,第二塊的校驗區也減少了有效存儲空間,所以組成RAID6陣列需至少4塊磁盤,磁盤利用率是n-2。
RAID 10/01
RAID 10是先鏡像再分區數據,再將所有硬盤分為兩組,視為是RAID 0的最低組合,然后將這兩組各自視為RAID 1運作。RAID 01則是跟RAID 10的程序相反,是先分區再將數據鏡像到兩組硬盤。它將所有的硬盤分為兩組,變成RAID 1的最低組合,而將兩組硬盤各自視為RAID 0運作。RAID 10/01磁盤利用率均為n/2。當RAID 10有一個硬盤受損,其余硬盤會繼續運作。RAID 01只要有一個硬盤受損,同組RAID 0的所有硬盤都會停止運作,只剩下其他組的硬盤運作,可靠性較低。如果以六個硬盤建RAID 01,鏡射再用三個建RAID 0,那么壞一個硬盤便會有三個硬盤離線。因此,RAID 10遠較RAID 01更為安全。
5,創建一個大小為10G的RAID 1,要求有一個空閑盤,而且chunk大小為128k;
[root@www ~]# mdadm -C /dev/md0 -a yes -n 2 -x 1 -c 128 -l 1 /dev/sdb{1,2,3} [root@www ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Sun Sep 3 02:11:03 2017 Raid Level : raid1 Array Size : 10482176 (10.00 GiB 10.73 GB) Used Dev Size : 10482176 (10.00 GiB 10.73 GB) Raid Devices : 2 Total Devices : 3 Persistence : Superblock is persistent Update Time : Sun Sep 3 02:11:55 2017 State : clean Active Devices : 2 Working Devices : 3 Failed Devices : 0 Spare Devices : 1 Name : www.iLove.org:0 (local to host www.iLove.org) UUID : dd4d92b5:6c1f0517:abf227fe:b579c6b2 Events : 17 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 18 1 active sync /dev/sdb2 2 8 19 - spare /dev/sdb3
6,創建一個大小為5G的RAID5設備,chuck大小為256k,格式化ext4文件系統,要求可開機自動掛載至/backup目錄,而且不更新訪問時間戳,且支持acl功能;
[root@www ~]# mdadm --create /dev/md1 -l5 -n3 -x1 -c 256 /dev/sdb{1,2,3,5} <---------------創建raid 5 mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md1 started. [root@www ~]# mdadm -D /dev/md1 <-----------------驗證raid 5創建結果 /dev/md1: Version : 1.2 Creation Time : Sun Sep 3 02:20:40 2017 Raid Level : raid5 Array Size : 10498048 (10.01 GiB 10.75 GB) Used Dev Size : 5249024 (5.01 GiB 5.38 GB) Raid Devices : 3 Total Devices : 4 Persistence : Superblock is persistent Update Time : Sun Sep 3 02:21:35 2017 State : clean Active Devices : 3 Working Devices : 4 Failed Devices : 0 Spare Devices : 1 Layout : left-symmetric Chunk Size : 256K Name : www.iLove.org:1 (local to host www.iLove.org) UUID : dd9a128d:0685c7b2:087e858b:7965b4a1 <------------------記錄UUID Events : 18 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 18 1 active sync /dev/sdb2 4 8 19 2 active sync /dev/sdb3 3 8 21 - spare /dev/sdb5 [root@www ~]# mke2fs -t ext4 /dev/md1 <-----------------------創建文件系統類型ext4 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=64 blocks, Stripe width=128 blocks 657072 inodes, 2624512 blocks 131225 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2688548864 81 block groups 32768 blocks per group, 32768 fragments per group 8112 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 30 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. [root@www dev]# vim /etc/fstab <--------------------編輯/etc/fstab文件添加下面的掛載信息 UUID=dd9a128d:0685c7b2:087e858b:7965b4a1 /backup ext4 defaults,noatime,acl 0 0
7,寫一個腳本
(1) 接受一個以上文件路徑作為參數;
(2) 顯示每個文件擁有的行數;
(3) 總結說明本地共為幾個文件統計了其行數;
#!/bin/bash if [ $# -lt 1 ]; then <--------------------設置給定的參數不得低于2個 echo "Please enter more than 2 arguments." exit 1 fi num=0 <-----------------定義變量lines為0 for files in $*; do <--------------------設置變量files為$*特殊變量的值,$*表示所有參數 if [ ! -f $files ]; then <--------------------判斷變量files不是文本文件 echo "${files} is not a ASCII text." <--------如果變量files不是文本文件,echo提示 else echo "${files} has "$(wc -l < $files)" lines." <-------變量files是文本文件,echo顯示文本文件的行數 let num++ <--------------------計算每次給定的文本文件數量,然后相加 fi done echo "File numbers:"$num <-------------------echo顯示最終給定的所有的文本文件數量 注意:腳本中,在for循環內嵌套了一個if多分支語句。
8,寫一個腳本
(1) 傳遞兩個以上字符串當做用戶名;
(2) 創建這些用戶,且密碼同用戶名;
(3) 總結說明共創建了幾個用戶;
#!/bin/bash if [ $# -lt 1 ]; then <--------------------設置給定的參數不得低于2個 echo "Please enter more than 2 arguments." exit 1 fi sum=0 for user in $*; do <--------------------設置變量user為$*特殊變量的值,$*表示所有參數 if grep "^$user\>" /etc/passwd &> /dev/null; then <--------------判斷要創建的帳號是否存在 echo "$user exists." exit 2 else useradd $user echo $user | passwd --stdin $user &> /etc/null echo "$user added." let sum++ <---------------------循環每執行一次,數量加1 fi done echo "count user numbers:"$sum
9,寫一個腳本,新建20個用戶,visitor1-vistor20,計算他們的id之和;
#!/bin/bash declare -i sum=0 <-------------------定義變量sum為數值型,bash變了默認為字符型 for i in {1..20}; do useradd visitor$i sum+=$(id -u visitor$i) <-----------------相加每次id號 done echo "id sum is $sum."
原創文章,作者:ZhengBin,如若轉載,請注明出處:http://www.www58058.com/86136
磁盤操作運維工作中用的不是特別頻繁,但是非常重要,他是數據安全的基礎,所以應特別注意加深理解和學習