Linux進階之RAID磁盤陣列、系統啓動及dd命令

本節內容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-0:要求磁盤的容量相同,總容量爲全部磁盤容量的和
  •        RAID-1:要求磁盤容量相同,總容量爲一塊硬盤容量
  •        RAID-1+0:請參考RAID-0/1
  •        RAID-5:要求容量相同,總容量爲磁盤容量減一
  •    備用磁盤:閒着沒用,用於頂替壞盤

RAID類型

最低磁盤個數

空間利用率

各自的優缺點

級別

說明

RAID0

條帶卷

2+

100%

讀寫速度快,不容錯

RAID1

鏡像卷

2

50%(1/n)

讀寫速度通常,容錯

RAID5

帶奇偶校驗的條帶卷

3+

n-1/n

讀寫速度快,容錯,容許壞一塊盤

RAID10

RAID1的安全+RAID0的高速

4

50%

讀寫速度快,容錯

4RAID三個關鍵技術

鏡像:提供了數據的安全性;

條帶(塊大小也能夠說是條帶的粒度),它的存在就是提供了數據併發性

數據的校驗:提供了數據的安全

5RAID等級詳解

1RAID-0的工做原理

條帶(strping),也是咱們最先出現的RAID模式,需磁盤數量2塊以上(大小最好相同),是組建磁盤陣列中最簡單的一種形式,只須要2塊以上的硬盤便可。

特色:成本低,能夠提升整個磁盤的性能。RAID 0沒有提供冗餘或錯誤修復能力,速度快。

任何一個磁盤的損壞將損壞所有數據;磁盤利用率爲100%

2RAID-1的工做原理

RAID 1 mirroring(鏡像卷),至少須要兩塊硬盤。

原理:是把一個磁盤的數據鏡像到另外一個磁盤上,也就是說數據在寫入一塊磁盤的同時,會在另外一塊閒置的磁盤上生成鏡像文件,(同步)

磁盤利用率爲50%,即2100G的磁盤構成RAID1只能提供100G的可用空間。

缺點:浪費資源,成本高

3RAID-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系統中失效硬盤。

4RAID-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、軟件磁盤陣列

1mdadm命令詳解

Linux內核中有一個md(multiple devices)模塊在底層管理RAID設備,它會在應用層給咱們提供一個應用程序的工具mdadm mdadmlinux下用於建立和管理軟件RAID的命令。

Mdadm命令常見參數:

參數

全寫

做用

-a

--add

--auto{=yesmdmdppartp}

添加磁盤

檢測設備名稱;

-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. uefiBIOS初始化,開始post(power on self test)開機自檢;這個過程是開機後,BIOSUEFI進行硬件檢查的階段。

2. 加載MBR到內存

自檢硬件沒有問題時候,這裏以BIOS爲例,BIOS將會直接找硬盤的第一個扇區,找到前446字節,將MBR加載到內存中,MBR將告訴程序下一階段去哪裏找系統的grub引導。此階段屬於grub第一階段。grub還有1.5階段和2階段。

3. GRUB階段

grub1.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須要的服務

CentOS67啓動區別

系統啓動和服務器守護進程管理器,它不一樣於centos5Sysv initcentos6UpstartUbuntu製做出來),systemd是由Redhat的一個員工首先提出來的,它在內核啓動後,服務什麼的全都被systemd接管,kernel只是用來管理硬件資源,至關於內核被架空了,所以linus很不滿意Redhat這種作法。



5、如何不用新分區添加swapdd

在以前的教程中咱們提到過如何去添加一個swap分區,以及如何給你的swap進行擴容。在教程中咱們使用的是新分區的方式,也就是新添加一塊硬盤,或在原有硬盤空餘空間的基礎上新建一個分區,而後將其格式化爲交換分區,最後進行掛載。

如今不少朋友使用的都是雲主機,雲主機通常不會設置swap(如某裏雲)購買以後通常使用的都是贈送的磁盤空間,且由於數據量小的緣由並不會購買數據盤,致使沒有可用分區轉換爲swap,有沒有什麼辦法能夠不用分區便可添加或擴容swap呢?今天就來教你們個方法!

首先使用dd命令生成一個固定大小的文件,文件的大小就是添加或擴容swap的大小:

  1.      dd if=/dev/zero of=/opt/swap bs=1M count=2048

而後使用mkswap命令將其格式化:

  1.      mkswap /opt/swap

使用swapon命令掛載:

  1.      swapon /opt/swap

看下一下,交換分區是否是變大了?

[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

相關文章
相關標籤/搜索