Linux磁盤分區與文件系統


一 Linux磁盤分區與文件系統

在Linux中常見的操作系統有:ext2 ext3 ext4 xfs btrfs reiserfs等
文件系統的作用主要是明確磁盤或分區上的文件存儲方法以及數據結構,Linux系統中數據分為元數據區和數據區,元數據區用於表示數據的屬主屬組,時間戳,訪問權限,數據大小以及數據塊指針等,每個文件的元數據會使用一個inode來標識。
在數據區中每個數據都會給它分配相應的數據塊並通過inode來指向所對應的數據塊。為了能夠加快對數據塊的索引,同時還會創建一個塊位圖來標識可用的數據塊。
為了更加便於管理inode和block,所以就產生了塊組的概念。塊組是將同一個系統的塊分成多個組進行管理,每個組都有獨立的block以及inode並使用superblock來標識每個塊組。

1 創建一個10G分區,格式化為ext4.塊大小為2048,預留空間比%2,卷標Mydata掛載到/data/mydata且禁止程序自動運行並不更新文件訪問時間戳

(1)[root@localhost ~]# fdisk /dev/sda 通過fdisk命令在sda上新創建一個10G分區
Command (m for help): n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
Select (default p): p
Partition number (3,4, default 3): 3
First sector (66004992-251658239, default 66004992):
Using default value 66004992
Last sector, +sectors or +size{K,M,G} (66004992-251658239, default 251658239): +10GB
Partition 3 of type Linux and of size 9.3 GiB is set
(2)[root@localhost ~]# partx -a /dev/sda 讓內核識別磁盤中的新分區
(3)[root@localhost ~]# mke2fs -b 2048 -m 2 -L mydata -t ext4 /dev/sda3 創建了一個ext4的分區,每個塊2k,給管理員預留%2的空間
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=mydata
OS type: Linux
Block size=2048 (log=1)
Fragment size=2048 (log=1)
Stride=0 blocks, Stripe width=0 blocks
612352 inodes, 4882944 blocks
97658 blocks (2.00%) reserved for the super user 預留給管理員的塊數
First data block=0
Maximum filesystem blocks=273678336 總共的塊數
299 block groups 總共的塊組
16384 blocks per group, 16384 fragments per group 每個塊組16384個block
2048 inodes per group 每個塊組有2048個inode
Superblock backups stored on blocks: 超級塊所在的塊組
16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816, 1327104,
2048000, 3981312

(4)[root@localhost ~]# mount -t ext4 -o acl,noexec,noatime /dev/sda3 /data/mydata/ 掛載至/data/mydata並且支持acl,禁止程序自動運行以及不更新訪問時間戳
(5)[root@localhost ~]# df -h /data/mydata/ 查看掛載后的結果
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 9.2G 13M 8.9G 1% /data/mydata

2 創建一個大小為1G的swap分區
[root@localhost ~]# fdisk /dev/sda 創建一個1G分區並將類型給為82(Linux swap)
Command (m for help): t
Partition number (1-5, default 5): 5
Hex code (type L to list all codes): 82
Changed type of partition 'Linux' to 'Linux swap / Solaris'

[root@localhost ~]# mkswap /dev/sda5 創建為swap分區
mkswap: /dev/sda5: warning: wiping old swap signature.
Setting up swapspace version 1, size = 1048572 KiB

[root@localhost ~]# swapon /dev/sda5 啟用該swap分區

二 RAID磁盤陣列
磁盤陣列(Redundant Arrays of Independent Disks,RAID),有“獨立磁盤構成的具有冗余能力的陣列”之意。是將多塊磁盤接口使用以實現提升IO能力以及冗余的存儲方式

RAID的級別:RAID分為6鍾不同級別,其中常見的有0,1和5以及10結合使用
RAID 0:0級別又稱之為條帶,在存儲同一個數據時會切分為多個chunk分別存儲到不同的設備,可提高IO讀寫能力但無法提供冗余能力。至少需要兩塊硬盤,其中一塊盤損壞數據就會丟失,可用空間為N*min
RAID 1:1級別又成為鏡像,是將同一份數據在2個或多個硬盤硬盤上同時存儲多分,可實現對數據的冗余性並且讀能力也會略有提升。至少需要兩塊硬盤可用空間為1*Min
RAID 5: 5級別是通過校驗碼,多塊盤中會有一塊盤輪流做校驗盤實現冗余以及IO能力的提升,至少使用三塊盤,最多只能容錯一塊盤。可用空間:(N-1)*min
RAID 10: RAID10是將1級別和0級別結合使用,這樣既可以提升讀寫性能又可以實現冗余。先建每組硬盤做成1級別,再將每個磁盤組做成0級別,做多只允許同組里的一塊盤損壞,可用空間是N*min/2

使用mdadm模塊化工具創建軟RAID

1 創建一個10G raid1設置chunk為128有一塊空閑盤
[root@localhost ~]# mdadm -C raid1 -c 128 -l 1 -n 2 -x 1 /dev/sda{6,7,8} 創建一個RAID1
[root@localhost ~]# mdadm -D /dev/md/raid1 / 查看RAID信息
/dev/md/raid1:
Version : 1.2
Creation Time : Sat Sep 2 16:19:05 2017
Raid Level : raid1
Array Size : 10477568 (9.99 GiB 10.73 GB)
Used Dev Size : 10477568 (9.99 GiB 10.73 GB)
Raid Devices : 2
Total Devices : 3
Persistence : Superblock is persistent

Update Time : Sat Sep 2 16:21:33 2017
State : clean, resyncing
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1

Resync Status : 57% complete

Name : localhost.localdomain:raid1 (local to host localhost.localdomain)
UUID : f16b9b94:3c463cab:c2d70272:8d1e3577
Events : 9

Number Major Minor RaidDevice State
0 8 6 0 active sync /dev/sda6
1 8 7 1 active sync /dev/sda7

2 8 8 - spare /dev/sda8

[root@localhost ~]# mdadm -f /dev/md/raid1 /dev/sda6 將其中一塊磁盤模擬為壞盤

Number Major Minor RaidDevice State
2 8 8 0 spare rebuilding /dev/sda8
1 8 7 1 active sync /dev/sda7

0 8 6 - faulty /dev/sda6 再次查看時會將備份盤自動添加進去

2 創建一個4G的RIAD5,chunk為256並格式化為ext4文件系統,開機自動掛載至/backup目錄

[root@localhost ~]# mdadm -C myraid5 -c 256 -l 5 -n 3 /dev/sda{6,7,8} 創建一個RIAD5 (此前先創建了3個分區,每個分區2GB)
[root@localhost ~]# mke2fs -L raid5 -t ext4 /dev/md/myraid5 將此設備格式化為exit4
LABEL=raid5 /backup ext4 defaults,acl,atime 0 0 編輯/etc/fstab文件實現開機自動掛載
[root@localhost ~]# mount -a 掛載fstab中的分區
[root@localhost ~]# df -h /backup/ 查看該分區
Filesystem Size Used Avail Use% Mounted on
/dev/md127 3.9G 16M 3.7G 1% /backup

三 shell腳本練習

1 列出當前系統上所有的磁盤設備並顯示每個磁盤上每個分區的相關信息

#!/bin/bash

disk=`fdisk -l | grep -E -o "^Disk /dev/sd[a-z]" | cut -d" " -f2` 提取出系統上有多少硬盤
echo this system disks list: $disk

for i in $disk; do 通過fdisk命令遍歷磁盤每個分區
fdisk -l $i
done

2 接受一個以上的文件路徑作為參數,顯示每個文件的行數並說明本次為幾個文件統計了其行數

#!/bin/bash

if [ $# -lt 1 ]; then
echo "At one more arguments"
exit 1
fi

for i in $*; do
lines=`wc -l $i | cut -d" " -f1 `
echo $i lines:$lines
done
echo files:$#
[root@localhost scrpit]# ./file_lines.sh /etc/fstab /etc/passwd /etc/fuse.conf /etc/fstab
/etc/fstab lines:13
/etc/passwd lines:42
/etc/fuse.conf lines:2
/etc/fstab lines:13
files:4

3 傳遞兩個以上字符串當作用戶名,創建這些用戶密碼通用戶名,總結說共創建了幾個用戶
#!/bin/bash
declare -i sum=0
if [ $# -lt 1 ]; then 判斷如果參數小於1就退出
echo "At least one arguments"
exit 1
else
for user in $*; do
[ `echo $user|wc -m` -le 4 ] && echo "Users name at leaset 3 string" && exit 2 如果用戶字符小於三個就退出腳本
if ! id $user &> /dev/null; then
useradd $user
echo "$user" | passwd --stdin $user &> /dev/null
let sum++ 每添加一個用戶讓sum變量加1
else
echo "$user is exist"
fi
done
fi

echo add users:$sum

4 寫一個腳本新建20個用戶,visitor1-visitor20並計算他們UID和

#!/bin/bash
declare -i uidsum=0
for user in {1..20}; do
id vistor$user &> /dev/null && echo vistor$i is exist && exit 1
useradd vistor$user
uid=`id -u vistor$user`
uidsum=$[$uidsum+$uid]
done
echo uidsum:$uidsum


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com