本節內容node
1. 磁盤陣列linux
RAID0: 條帶卷 2+ 100% 讀寫速度快,不容錯面試
RAID1: 鏡像卷 2 50% 讀寫速度慢,容錯centos
RAID5: 奇偶校驗條帶卷 3 讀寫速度快,容錯,只容許錯一塊安全
RAID10: RAID0+RAID1 4 50% 讀寫速度快,容錯服務器
2. 建立陣列方式併發
硬件:磁盤陣列盒app
軟件: mdadmide
3. mdadm命令工具
-C: 建立
-v: 顯示建立過程
-a: 添加磁盤、自動檢測設備
-l: 陣列級別
-n: 磁盤數量
-x: 備份盤數量
-f: 模擬損壞
-D:查看陣列詳細信息
-S:中止陣列
-r: 移除磁盤
4. 建立RAID10
mdadm -Cv /dev/md10 -n 4 -l 10 /dev/sd{b,c,d,e}
5. 模擬損壞
mdadm /dev/md10 -f /dev/sdd
6. 磁盤損壞後的操做
poweroff
移除壞磁盤
新硬盤添加
虛擬機操做: mdadm /dev/md10 -a /dev/sdd
7. 搭建RAID5+熱備盤
mdadm -Cv /dev/md5 -n 3 -l 5 -x 1 /dev/sd{b,c,d,e}
8. 自動掛載
echo "/dev/md5 /ken xfs defaults 0 0" >> /etc/fstab
9. 系統啓動
1. BISO初始化,post開機自檢
2. 加載MBR到內存
3. grub階段
4. 加載內核和initramfs模塊
5. 內核初始化,使用centos7系統使用的是systemd替換了centos6當中的init
10. dd if=/dev/zero of=/dev/swap bs=XM count=2048
磁盤陣列
1、概念
1、什麼是RAID
RAID全稱Redundant Array of Inexpensive Disks,廉價冗餘磁盤陣列,經過多塊磁盤組成一種模式,來提升吞吐量和可靠性。磁盤陣列是由不少價格較便宜的磁盤,以硬件(RAID卡)或軟件(MDADM)形式組合成一個容量巨大的磁盤組,利用多個磁盤組合在一塊兒,提高整個磁盤系統效能。
RAID能夠把硬盤整合成一個大磁盤,還能夠在大磁盤上再分區,放數據;還有一個大功能,多塊盤放在一塊兒能夠有冗餘(備份)。
RAID的建立有兩種方式:軟RAID(經過操做系統軟件來實現)和硬RAID(使用硬件陣列卡)
RAID基本思想:把好幾塊硬盤經過必定組合方式把它組合起來,成爲一個新的硬盤陣列組,從而使它可以達到高性能硬盤的要求。
2、磁盤陣列功能
A 整合閒置磁盤空間
B 提升磁盤讀取效率
C 提供容錯功能
3、磁盤陣列等級
RAID類型 |
最低磁盤個數 |
空間利用率 |
各自的優缺點 |
|
級別 |
說明 |
|||
RAID0 |
條帶卷 |
2+ |
100% |
讀寫速度快,不容錯 |
RAID1 |
鏡像卷 |
2 |
50%(1/n) |
讀寫速度通常,容錯 |
RAID5 |
帶奇偶校驗的條帶卷 |
3+ |
(n-1)/n |
讀寫速度快,容錯,容許壞一塊盤 |
RAID10 |
RAID1的安全+RAID0的高速 |
4 |
50% |
讀寫速度快,容錯 |
4、RAID三個關鍵技術
鏡像:提供了數據的安全性;
條帶(塊大小也能夠說是條帶的粒度),它的存在就是提供了數據併發性
數據的校驗:提供了數據的安全
5、RAID等級詳解
(1)RAID-0的工做原理
條帶(strping),也是咱們最先出現的RAID模式,需磁盤數量2塊以上(大小最好相同),是組建磁盤陣列中最簡單的一種形式,只須要2塊以上的硬盤便可。
特色:成本低,能夠提升整個磁盤的性能。RAID 0沒有提供冗餘或錯誤修復能力,速度快。
任何一個磁盤的損壞將損壞所有數據;磁盤利用率爲100%。
(2)RAID-1的工做原理
RAID 1 mirroring(鏡像卷),至少須要兩塊硬盤。
原理:是把一個磁盤的數據鏡像到另外一個磁盤上,也就是說數據在寫入一塊磁盤的同時,會在另外一塊閒置的磁盤上生成鏡像文件,(同步)
磁盤利用率爲50%,即2塊100G的磁盤構成RAID1只能提供100G的可用空間。
缺點:浪費資源,成本高
(3)RAID-5的工做原理
須要三塊或以上硬盤,能夠提供熱備盤實現故障的恢復;只損壞一塊,沒有問題。但若是同時損壞兩塊磁盤,則數據將都會損壞。 空間利用率: (n-1)/n
特色:讀寫性能通常,讀還好一點,寫很差
奇偶檢驗:raid5的數據恢復原理就是用公式算出來的
最左邊的是原始數據,右邊分別是三塊硬盤,假設第二塊硬盤出了故障,經過第一塊硬盤上的 1 和第三塊硬盤上的 1 xor 2,就可以還原出 2。同理能夠還原出 3 和 8。至於 5 xor 6 則更簡單了,直接用 5 和 6 運算出來便可。
RAID硬盤失效處理:熱備和熱插拔
a、熱備:HotSpare
定義:當冗餘的RAID組中某個硬盤失效時,在不干擾當前RAID系統的正常使用的狀況下,用RAID系統中另一個正常的備用硬盤自動頂替失效硬盤,及時保證RAID系統的冗餘性
全局式:備用硬盤爲系統中全部的冗餘RAID組共享
專用式:備用硬盤爲系統中某一組冗餘RAID組專用
b、熱插拔:HotSwap
定義:在不影響系統正常運轉的狀況下,用正常的物理硬盤替換RAID系統中失效硬盤。
(4)RAID-10鏡像+條帶(嵌套RAID級別)
RAID 10是將鏡像和條帶進行兩級組合的RAID級別,第一級是RAID1鏡像對,第二級爲RAID 0。好比咱們有8塊盤,它是先兩兩作鏡像,造成了新的4塊盤,而後對這4塊盤作RAID0;當RAID10有一個硬盤受損其他硬盤會繼續工做,這個時候受影響的硬盤只有2塊。
6、三種RAID的排序
冗餘從好到壞:RAID1 RAID10 RAID5 RAID0
性能從好到壞:RAID0 RAID10 RAID5 RAID1
成本從低到高:RAID0 RAID5 RAID1 RAID10
2、硬件磁盤陣列介紹
不須要CPU處理的磁盤陣列就叫硬件磁盤陣列
面試題:咱們作硬件RAID,是在裝系統前仍是以後?
答:先作陣列才裝系統 ,通常服務器啓動時,有顯示進入配置Riad的提示。
硬RAID:須要RAID卡,咱們的磁盤是接在RAID卡的,由它統一管理和控制。數據也由它來進行分配和維護;它有本身的cpu,處理速度快
軟RAID:經過操做系統實現
3、軟件磁盤陣列
1、mdadm命令詳解
Linux內核中有一個md(multiple devices)模塊在底層管理RAID設備,它會在應用層給咱們提供一個應用程序的工具mdadm ,mdadm是linux下用於建立和管理軟件RAID的命令。
Mdadm命令常見參數:
參數 |
全寫 |
做用 |
-a |
--add --auto{=yes,md,mdp,part,p} |
添加磁盤 檢測設備名稱; |
-n |
--raid-devices=N |
指定設備數量 |
-x |
--spare-devices=N |
指定冗餘設備數量 |
-l |
--level=[0 1 5] |
指定RAID級別 |
-C |
--create |
建立 |
-v |
--verbose |
顯示過程 |
-f |
--fail |
模擬設備損壞 |
-r |
--remove |
移除設備 |
-Q |
--query |
查看摘要信息 |
-D |
--detail |
查看詳細信息 |
-S |
--stop |
中止RAID磁盤陣列 |
2、實戰搭建raid10陣列
第一步:新添加4塊硬盤,查看磁盤
[root@renyz08 ~]# ls /dev/sd*
/dev/sda /dev/sda1 /dev/sda2 /dev/sdb /dev/sdc /dev/sdd /dev/sde
第二步:下載mdadm
[root@renyz08 ~]# yum install mdadm -y
第三步:建立raid10陣列
[root@renyz08 ~]# mdadm --create --verbose /dev/md10 --auto=yes --raid-devices=4 --level=10 /dev/sd{b,c,d,e}
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md10 started.
第四步:格式化磁盤陣列爲ext4
[root@renyz08 ~]# mkfs.ext4 /dev/md10
mke2fs 1.42.9 (28-Dec-2013)
文件系統標籤=
OS type: Linux
塊大小=4096 (log=2)
分塊大小=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
2621440 inodes, 10477056 blocks
523852 blocks (5.00%) reserved for the super user
第一個數據塊=0
Maximum filesystem blocks=2157969408
320 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624
Allocating group tables: 完成
正在寫入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
第五步:掛載
[root@renyz08 ~]# mkdir /raid10
[root@renyz08 ~]# mount /dev/md10 /raid10
[root@renyz08 ~]# df -h
文件系統 容量 已用 可用 已用% 掛載點
/dev/mapper/centos-root 17G 1.2G 16G 7% /
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.6M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 1014M 133M 882M 14% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/md10 40G 49M 38G 1% /raid10
第六步:查看/dev/md0的詳細信息
[root@renyz08 ~]# mdadm --detail /dev/md10
/dev/md10:
Version : 1.2
Creation Time : Thu Jul 18 10:44:59 2019
Raid Level : raid10
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Jul 18 10:49:20 2019
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Layout : near=2
Chunk Size : 512K
Consistency Policy : resync
Name : renyz08:10 (local to host renyz08)
UUID : 8c2449e5:889b6950:3c8643c7:5a7cb07d
Events : 19
Number Major Minor RaidDevice State
0 8 16 0 active sync set-A /dev/sdb
1 8 32 1 active sync set-B /dev/sdc
2 8 48 2 active sync set-A /dev/sdd
3 8 64 3 active sync set-B /dev/sde
第七步:寫入配置文件
[root@renyz08 ~]# echo "/dev/md10 /raid10 ext4 defaults 0 0" >> /etc/fstab
3、損壞磁盤陣列及修復
之因此在生產環境中部署RAID 10磁盤陣列,是爲了提升硬盤存儲設備的讀寫速度及數據的安全性,但因爲咱們的硬盤設備是在虛擬機中模擬出來的,所以對讀寫速度的改善可能並不直觀。
在確認有一塊物理硬盤設備出現損壞而不能繼續正常使用後,應該使用mdadm命令將其移除,而後查看RAID磁盤陣列的狀態,能夠發現狀態已經改變。
第一步:模擬設備損壞
[root@renyz08 ~]# cat /proc/mdstat #查看設備運行狀態
Personalities : [raid10]
md10 : active raid10 sde[3] sdd[2] sdc[1] sdb[0]
41908224 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
unused devices: <none>
[root@renyz08 ~]# mdadm /dev/md10 --fail /dev/sdb #損壞磁盤sdb
mdadm: set /dev/sdb faulty in /dev/md10
[root@renyz08 ~]# cat /proc/mdstat
Personalities : [raid10]
md10 : active raid10 sde[3] sdd[2] sdc[1] sdb[0](F)
41908224 blocks super 1.2 512K chunks 2 near-copies [4/3] [_UUU]
unused devices: <none>
第二步:添加新的磁盤
在RAID 10級別的磁盤陣列中,當RAID 1磁盤陣列中存在一個故障盤時並不影響RAID 10磁盤陣列的使用。當購買了新的硬盤設備後再使用mdadm命令來予以替換便可,在此期間咱們能夠在/RAID目錄中正常地建立或刪除文件。因爲咱們是在虛擬機中模擬硬盤,因此先重啓系統,而後再把新的硬盤添加到RAID磁盤陣列中。
[root@renyz08 ~]# reboot
[root@renyz08 ~]# umount /raid10
[root@renyz08 ~]# mdadm /dev/md10 -a /dev/sdb
mdadm: added /dev/sdb
[root@renyz08 ~]# cat /proc/mdstat
Personalities : [raid10]
md10 : active raid10 sdb[4] sde[3] sdd[2] sdc[1]
41908224 blocks super 1.2 512K chunks 2 near-copies [4/3] [_UUU]
[==============>......] recovery = 71.4% (14966144/20954112) finish=0.1min speed=650701K/sec
unused devices: <none>
第三步:再次查看,已經構建完成
[root@renyz08 ~]# mdadm -D /dev/md10
4、實戰搭建raid5陣列+備份盤
第一步:建立raid5磁盤陣列
[root@renyz08 ~]# ls /dev/sdb*
/dev/sdb /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdb4 /dev/sdb5
[root@renyz08 ~]# mdadm -C -a yes /dev/md5 -l 5 -n 3 -x 1 /dev/sdb{1,2,3,5}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
第二步:格式化
[root@renyz08 ~]# mkfs.xfs /dev/md5
第三步:掛載
[root@renyz08 ~]# mkdir /raid5
[root@renyz08 ~]# mount /dev/md5 /raid5
[root@renyz08 ~]# df -h
文件系統 容量 已用 可用 已用% 掛載點
/dev/md5 8.0G 33M 8.0G 1% /raid5
第四步:查看
[root@renyz08 ~]# cat /proc/mdstat #查詢運行狀態
Personalities : [raid6] [raid5] [raid4]
md5 : active raid5 sdb3[4] sdb5[3](S) sdb2[1] sdb1[0]
8376320 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
[root@renyz08 ~]# mdadm -D /dev/md5 #查詢磁盤陣列信息
第五步:模擬錯誤
[root@renyz08 ~]# cat /proc/mdstat
md5 : active raid5 sdb1[5](S) sdb5[3] sdb2[1] sdb3[4]
[root@renyz08 ~]# mdadm /dev/md5 -f /dev/sdb2
mdadm: set /dev/sdb2 faulty in /dev/md5
[root@renyz08 ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md5 : active raid5 sdb1[5] sdb5[3] sdb2[1](F) sdb3[4]
第六步:移除磁盤
[root@renyz08 ~]# mdadm --manage /dev/md5 -r /dev/sdb2
mdadm: hot removed /dev/sdb2 from /dev/md5
[root@renyz08 ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md5 : active raid5 sdb1[5] sdb5[3] sdb3[4]
第七步:增長磁盤
[root@renyz08 ~]# mdadm --manage /dev/md5 -a /dev/sdb2
mdadm: added /dev/sdb2
[root@renyz08 ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md5 : active raid5 sdb2[6](S) sdb1[5] sdb5[3] sdb3[4]
第八步:停用磁盤陣列
[root@renyz08 ~]# mdadm -S /dev/md5 #未取消掛載,停用操做無用
mdadm: Cannot get exclusive access to /dev/md5:Perhaps a running process, mounted filesystem or active volume group?
[root@renyz08 ~]# umount /dev/md5 /raid5 #先取消掛載
umount: /raid5:未掛載
[root@renyz08 ~]# mdadm -S /dev/md5 #停用磁盤陣列
mdadm: stopped /dev/md5
4、centos7系統啓動過程及相關配置文件
1. uefi或BIOS初始化,開始post(power on self test)開機自檢;這個過程是開機後,BIOS或UEFI進行硬件檢查的階段。
2. 加載MBR到內存
自檢硬件沒有問題時候,這裏以BIOS爲例,BIOS將會直接找硬盤的第一個扇區,找到前446字節,將MBR加載到內存中,MBR將告訴程序下一階段去哪裏找系統的grub引導。此階段屬於grub第一階段。grub還有1.5階段和2階段。
3. GRUB階段
grub第1.5和第2階段,信息默認存放在扇區中,若是使用grub-install生成的第2階段的文件是存放在/boot分區中的。
爲了加載內核系統,不得不加載/boot分區,而加載/boot分區,要有/boot分區的驅動,/boot分區驅動是放在/boot分區中的啊,咱們好像進入死循環了,Linux是怎麼解決的呢?就是靠放在1.5階段中的數據,放在第一個扇區後的後續扇區中,第1.5階段和2階段總共27個扇區。
第1.5階段:mbr以後的扇區,識別stage2所在的分區上的文件系統。
第2階段:開機啓動的時候看到Grub選項、信息,還有修改GRUB背景等功能都是stage2提供的,stage2會去讀入/boot/grub/grub.conf或者menu.lst等配置文件。
4. 加載內核和initramfs模塊
加載內核,核心開始解壓,啓動一些最核心的程序。
爲了讓內核足夠的輕小,硬件驅動並沒放在內核文件裏面。
5. 內核開始初始化,使用systemd來代替centos6之前的init程序
(1)執行initrd.target
包括掛載/etc/fstab文件中的系統,此時掛載後,就能夠切換到根目錄了
(2)從initramfs根文件系統切換到磁盤根目錄
(3)systemd執行默認target配置
centos7表面是有「運行級別」這個概念,其實是爲了兼容之前的系統,每一個所謂的「運行級別」都有對應的軟鏈接指向,默認的啓動級別時/etc/systemd/system/default.target,根據它的指向能夠找到系統要進入哪一個模式
模式:
0 ==> runlevel0.target, poweroff.target
1 ==> runlevel1.target, rescue.target
2 ==> runlevel2.target, multi-user.target
3 ==> runlevel3.target, multi-user.target
4 ==> runlevel4.target, multi-user.target
5 ==> runlevel5.target, graphical.target
6 ==> runlevel6.target, reboot.target
(4)systemd執行sysinit.target
有沒有很眼熟?是的,在CentOS6上是被叫作rc.sysint程序,初始化系統及basic.target準備操做系統
(5)systemd啓動multi-user.target下的本機與服務器服務
(6)systemd執行multi-user.target下的/etc/rc.d/rc.local
6. Systemd執行multi-user.target下的getty.target及登陸服務
getty.target咱們也眼熟,它是啓動終端的systemd對象。若是到此步驟,系統沒有被指定啓動圖形桌面,到此就能夠結束了,若是要啓動圖形界面,須要在此基礎上啓動桌面程序
7. systemd執行graphical須要的服務
CentOS6,7啓動區別
系統啓動和服務器守護進程管理器,它不一樣於centos5的Sysv init,centos6的Upstart(Ubuntu製做出來),systemd是由Redhat的一個員工首先提出來的,它在內核啓動後,服務什麼的全都被systemd接管,kernel只是用來管理硬件資源,至關於內核被架空了,所以linus很不滿意Redhat這種作法。
5、如何不用新分區添加swap(dd)
在以前的教程中咱們提到過如何去添加一個swap分區,以及如何給你的swap進行擴容。在教程中咱們使用的是新分區的方式,也就是新添加一塊硬盤,或在原有硬盤空餘空間的基礎上新建一個分區,而後將其格式化爲交換分區,最後進行掛載。
如今不少朋友使用的都是雲主機,雲主機通常不會設置swap(如某裏雲)購買以後通常使用的都是贈送的磁盤空間,且由於數據量小的緣由並不會購買數據盤,致使沒有可用分區轉換爲swap,有沒有什麼辦法能夠不用分區便可添加或擴容swap呢?今天就來教你們個方法!
首先使用dd命令生成一個固定大小的文件,文件的大小就是添加或擴容swap的大小:
而後使用mkswap命令將其格式化:
使用swapon命令掛載:
看下一下,交換分區是否是變大了?
[root@renyz08 ~]# free -h
total used free shared buff/cache available
Mem: 972M 85M 766M 7.6M 119M 741M
Swap: 2.0G 0B 2.0G
[root@renyz08 ~]# dd if=/dev/zero of=/opt/swap bs=1M count=2048
記錄了2048+0 的讀入
記錄了2048+0 的寫出
2147483648字節(2.1 GB)已複製,20.2102 秒,106 MB/秒
[root@renyz08 ~]# mkswap /opt/swap
正在設置交換空間版本 1,大小 = 2097148 KiB
無標籤,UUID=88cbe933-fdc6-495c-9155-deea9b0b8948
[root@renyz08 ~]# swapon /opt/swap
swapon: /opt/swap:不安全的權限 0644,建議使用 0600。
[root@renyz08 ~]# chmod 600 /opt/swap
[root@renyz08 ~]# free -h
total used free shared buff/cache available
Mem: 972M 84M 60M 7.6M 826M 712M
Swap: 4.0G 0B 4.0G
原理:Linux中皆是文件,swap對於linux系統來講也是一個文件,/opt/swap對於linux系統來講也是一個文件,這樣概念就對等了。實際上這些文件就像一個筆記本,它是一個實體也是一個載體,咱們是能夠在筆記本中記錄內容,如同能夠在/opt/swap中寫入數據的。
/dev/null 黑洞文件(不保存)
/dev/zero 白洞文件源源不斷的向外輸出文件
轉換和拷貝文件
if=file
從 file 中讀而不是標準輸入。
of=file
寫到 file 裏去而不是標準輸出
bs=bytes
一次讀和寫 bytes 字節
count=blocks
只拷貝輸入文件的前 blocks 塊