RAID磁盤陣列及CentOS7系統啓動流程

磁盤陣列(Redundant Arrays of Independent Disks,RAID),有「獨立磁盤構成的具備冗餘能力的陣列」之意,,數據讀取無影響。將數據切割成許多區段,分別存放在各個硬盤上。 磁盤陣列還能利用同位檢查(Parity Check)的觀念,在數組中任意一個硬盤故障時,仍可讀出數據...硬件用的多。html

         注:RAID能夠預防數據丟失,可是它並不能徹底保證你的數據不會丟失,因此你們使用RAID的同時仍是注意備份重要的數據node

         RAID的建立有兩種方式:軟RAID(經過操做系統軟件來實現)和硬RAID(使用硬件陣列卡);瞭解raid一、raid5和raid10。不過隨着雲的高速發展,供應商通常能夠把硬件問題解決掉。linux

 

RAID幾種常見的類型面試

RAID類型算法

最低磁盤個數vim

空間利用率centos

各自的優缺點數組

級 別安全

說 明服務器

RAID0

條帶卷

2+

100%

讀寫速度快,不容錯

RAID1

鏡像卷

2

50%

讀寫速度通常,容錯

RAID5

帶奇偶校驗的條帶卷

3+

(n-1)/n

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

RAID10

RAID1的安全+RAID0的高速

4

50%

讀寫速度快,容錯

 

RAID基本思想:把好幾塊硬盤經過必定組合方式把它組合起來,成爲一個新的硬盤陣列組,從而使它可以達到高性能硬盤的要求

 

RAID有三個關鍵技術:

 

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

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

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

 

Raid相對於單個磁盤優勢:

 

 

 

RAID-0的工做原理

條帶 (strping),最先出現,需磁盤數量:2塊以上(大小最好相同),是組建磁盤陣列中最簡單的一種形式、

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

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

 

 

RAID-1

mirroring(鏡像卷),須要磁盤兩塊以上

原理:是把一個磁盤的數據鏡像到另外一個磁盤上,(同步複製備份)

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

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

 

 

RAID-5

須要三塊或以上硬盤,能夠提供熱備盤實現故障的恢復;只損壞一塊,沒有問題。但若是同時損壞兩塊磁盤,則數據將都會損壞。 空間利用率: (n-1)/n 少一塊磁盤,這塊少的做了熱備盤,存放校驗碼和算法,  2/3  以下圖所示

 

 

奇偶校驗信息的做用:

當RAID5的一個磁盤數據發生損壞後,利用剩下的數據和相應的奇偶校驗信息去恢復被損壞的數據。是一種數據算法。

 

擴展:異或運算

所謂的「奇偶校驗」能夠簡單理解爲二進制運算中的「異或運算」,一般用 xor 標識。

深刻淺出解釋 <wbr>raid <wbr>5 <wbr>恢復數據的原理

    最左邊的是原始數據,右邊分別是三塊硬盤,假設第二塊硬盤出了故障,經過第一塊硬盤上的 1 和第三塊硬盤上的 1 xor 2,就可以還原出 2。同理能夠還原出 3 和 8。至於 5 xor 6 則更簡單了,直接用 5 和 6 運算出來便可。
    一句話解釋 raid 5 的數據恢復原理就是:都是用公式算出來的。

 

   嵌套RAID級別

RAID-10鏡像+條帶

         RAID 10是將鏡像和條帶進行兩級組合的RAID級別,第一級是RAID1鏡像對,第二級爲RAID 0。好比咱們有8塊盤,它是先兩兩作鏡像,造成了新的4塊盤,而後對這4塊盤作RAID0;當RAID10有一個硬盤受損其他硬盤會繼續工做,這個時候受影響的硬盤只有2塊,容許壞一半。

 

 數據比金錢更重要DBA。

RAID硬盤失效處理

 

通常兩種處理方法:熱備熱插拔

熱備:HotSpare

定義:當冗餘的RAID組中某個硬盤失效時,在不干擾當前RAID系統的正常使用的狀況下,用RAID系統中另一個正常的備用硬盤自動頂替失效硬盤,及時保證RAID系統的冗餘性

全局式:備用硬盤爲系統中全部的冗餘RAID組共享

專用式:備用硬盤爲系統中某一組冗餘RAID組專用

以下圖所示:是一個全局熱備的示例,該熱備盤由系統中兩個RAID組共享,可自動頂替任何一個RAID中的一個失效硬盤

 

 

熱插拔:HotSwap

定義:在不影響系統正常運轉的狀況下,用正常的物理硬盤替換RAID系統中失效硬盤。

 

 

RAID-0-1-5-10搭建及使用-刪除RAID及注意事項

 

RAID的實現方式

面試題:咱們作硬件RAID,是在裝系統前仍是以後? 

答:先作陣列才裝系統 ,通常服務器啓動時,有顯示進入配置Riad的提示。

硬RAID:須要RAID卡,咱們的磁盤是接在RAID卡的,由它統一管理和控制。數據也由它來進行分配和維護;它有本身的cpu,處理速度快

軟RAID:經過操做系統實現

 

Mdadm命令詳解

 用軟件實現RAID。

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

 

mdadm命令常見參數解釋:

參數

做用

-a                                                    

檢測設備名稱

添加磁盤                                                                                           

-n

指定設備數量

-l

指定RAID級別                                                              

-C

建立

-v

顯示過程

-f

模擬設備損壞

-r

移除設備

-Q

查看摘要信息

-D

查看詳細信息

-S

中止RAID磁盤陣列

 

互動: raid5須要3塊硬盤。  那麼使用4塊硬盤,能夠作raid5嗎?

能夠的

 

實戰搭建raid10陣列

 

新添加4塊硬盤,添加過程一直點擊下一步便可 

 

 

第一步:查看磁盤

[root@ken ~]# ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb  /dev/sdc  /dev/sdd  /dev/sde

作一張快照。

第二步:下載mdadm

[root@ken ~]# yum install mdadm -y

 

第三步:建立raid10陣列

複製代碼
[root@ken ~]# mdadm -Cv /dev/md0 -a yes -n 4 -l 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: Fail create md0 when using /sys/module/md_mod/parameters/new_array
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
複製代碼

 指定的陣列名稱md10和raid10保持數字一致

查看磁盤建立詳細信息 :# mdadm -D /dev/md10  過程較慢

第四步:格式磁盤陣列爲ext4  (格式化後才能使用)

複製代碼
[root@ken ~]# mkfs.ext4 /dev/md0
mapper/ mcelog  md0     mem     midi    mqueue/ 
[root@ken ~]# mkfs.ext4 /dev/md0 
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
2621440 inodes, 10477056 blocks
523852 blocks (5.00%) reserved for the super user
First data block=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: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done   
複製代碼

進行掛載: # mkfs.xfs   /dev/md10

# mkdir /ken    # mount /dev/md10  /ken    # df -h        (50%)

設置開機自啓 :# vim /etc/fstab      (/dev/md10 /ken xfs defaults 0 0)

第五步:掛載

複製代碼
[root@ken ~]# mkdir /raid10
[root@ken ~]# mount /dev/md0 /raid10
[root@ken ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   17G  1.2G   16G   7% /
devtmpfs                 224M     0  224M   0% /dev
tmpfs                    236M     0  236M   0% /dev/shm
tmpfs                    236M  5.6M  230M   3% /run
tmpfs                    236M     0  236M   0% /sys/fs/cgroup
/dev/sda1               1014M  130M  885M  13% /boot
tmpfs                     48M     0   48M   0% /run/user/0
/dev/md0                  40G   49M   38G   1% /raid10
複製代碼

 

第六步:查看/dev/md0的詳細信息

複製代碼
[root@ken ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Thu Feb 28 19:08:25 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 Feb 28 19:11:41 2019
             State : clean, resyncing 
    Active Devices : 4
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 0

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

     Resync Status : 96% complete

              Name : ken:0  (local to host ken)
              UUID : c5df1175:a6b1ad23:f3d7e80b:6b56fe98
            Events : 26

    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@ken ~]# echo "/dev/md0 /raid10 ext4 defaults 0 0" >> /etc/fstab

 

損壞磁盤陣列及修復

 

之因此在生產環境中部署RAID 10磁盤陣列,是爲了提升硬盤存儲設備的讀寫速度及數據的安全性,但因爲咱們的硬盤設備是在虛擬機中模擬出來的,所以對讀寫速度的改善可能並不直觀。

在確認有一塊物理硬盤設備出現損壞而不能繼續正常使用後,應該使用mdadm命令將其移除,而後查看RAID磁盤陣列的狀態,能夠發現狀態已經改變。

 

第一步:模擬設備損壞

複製代碼
[root@ken ~]# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
[root@ken ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Thu Feb 28 19:08:25 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 Feb 28 19:15:59 2019
             State : clean, degraded 
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 1
     Spare Devices : 0

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

              Name : ken:0  (local to host ken)
              UUID : c5df1175:a6b1ad23:f3d7e80b:6b56fe98
            Events : 30

    Number   Major   Minor   RaidDevice State
       -       0        0        0      removed
       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

       0       8       16        -      faulty   /dev/sdb
複製代碼

 

第二步:添加新的磁盤

在RAID 10級別的磁盤陣列中,當RAID 1磁盤陣列中存在一個故障盤時並不影響RAID 10磁盤陣列的使用。當購買了新的硬盤設備後再使用mdadm命令來予以替換便可,在此期間咱們能夠在/RAID目錄中正常地建立或刪除文件。因爲咱們是在虛擬機中模擬硬盤,因此先重啓系統,而後再把新的硬盤添加到RAID磁盤陣列中。

複製代碼
[root@ken ~]# reboot
[root@ken ~]# umount /raid10
[root@ken ~]# mdadm /dev/md0 -a /dev/sdb
mdadm: added /dev/sdb
[root@ken ~]# mdadm -D  /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Thu Feb 28 19:08:25 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 Feb 28 19:19:14 2019
             State : clean, degraded, recovering 
    Active Devices : 3
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 1

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status : 7% complete                                      #這裏顯示重建進度

              Name : ken:0  (local to host ken)
              UUID : c5df1175:a6b1ad23:f3d7e80b:6b56fe98
            Events : 35

    Number   Major   Minor   RaidDevice State
       4       8       16        0      spare rebuilding   /dev/sdb    #rebuilding重建中
       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@ken ~]# mdadm -D  /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Thu Feb 28 19:08:25 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 Feb 28 19:20:52 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 : ken:0  (local to host ken)
              UUID : c5df1175:a6b1ad23:f3d7e80b:6b56fe98
            Events : 51

    Number   Major   Minor   RaidDevice State
       4       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
複製代碼

 模擬磁盤損壞:

     查看詳細信息:# mdadm -D /dev/md10  選擇模擬損壞的磁盤

# mdadm /dev/md10 -f /dev/sde          # mdadm -D /dev md10   (磁盤已損壞)

# poweroff 關機  (在實際中,須要關機拿掉壞的磁盤,換上新的磁盤,不能自動識別)

還須要手動添加先查看: # mdadm -D /dev/md10     

添加:# mdadm /dev/md10 -a /dev/sde   (a = add)

查看:# mdadm -D /dev/md10   (Rebuild Status :顯示數據同步情況)

 

實戰搭建 raid5 陣列+備份盤

 (命令作陣列僅供瞭解)

爲了不多個實驗之間相互發生衝突,咱們須要保證每一個實驗的相對獨立性,爲此須要你們自行將虛擬機還原到初始狀態。另外,因爲剛纔已經演示了RAID 10磁盤陣列的部署方法,咱們如今來看一下RAID 5的部署效果。部署RAID 5磁盤陣列時,至少須要用到3塊硬盤,還須要再加一塊備份硬盤,因此總計須要在虛擬機中模擬4塊硬盤設備。

 

第一步:查看磁盤

[root@ken ~]# ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb  /dev/sdc  /dev/sdd  /dev/sde

 

第二步:建立RAID5陣列

複製代碼
[root@ken ~]# mdadm  -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sd{b,c,d,e}
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Fail create md0 when using /sys/module/md_mod/parameters/new_array
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
複製代碼

 # mdadm -D /dev/md5   備份的磁盤 e 顯示 spare 狀態。

設置備份:# mdadm /dev/md5 -f /dev/sdd   (模擬 sdd 盤損壞)

查看: # mdadm -D /dev/md5   (sde 替代sdd 的位置) 數據開始備份。

 

第三步:格式化爲ext4

複製代碼
[root@ken ~]# mkfs.ext4 /dev/md0 
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
2621440 inodes, 10477056 blocks
523852 blocks (5.00%) reserved for the super user
First data block=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: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done  
複製代碼

 

第四步:掛載

複製代碼
[root@ken ~]# mount /dev/md0 /raid5
[root@ken ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   17G  1.2G   16G   7% /
devtmpfs                 476M     0  476M   0% /dev
tmpfs                    488M     0  488M   0% /dev/shm
tmpfs                    488M  7.7M  480M   2% /run
tmpfs                    488M     0  488M   0% /sys/fs/cgroup
/dev/sda1               1014M  130M  885M  13% /boot
tmpfs                     98M     0   98M   0% /run/user/0
/dev/md0                  40G   49M   38G   1% /raid5
複製代碼

 

第五步:查看陣列信息

能夠發現有一個備份盤/dev/sde

複製代碼
[root@ken ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Thu Feb 28 19:35:10 2019
        Raid Level : raid5
        Array Size : 41908224 (39.97 GiB 42.91 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 3
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Thu Feb 28 19:37:11 2019
             State : active 
    Active Devices : 3
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

              Name : ken:0  (local to host ken)
              UUID : b693fe72:4452bd3f:4d995779:ee33bc77
            Events : 76

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       4       8       48        2      active sync   /dev/sdd

       3       8       64        -      spare   /dev/sde
複製代碼

 

第六步:模擬/dev/sdb磁盤損壞

能夠發現/dev/sde備份盤當即開始構建

複製代碼
[root@ken ~]# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
[root@ken ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Thu Feb 28 19:35:10 2019
        Raid Level : raid5
        Array Size : 41908224 (39.97 GiB 42.91 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 3
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Thu Feb 28 19:38:41 2019
             State : active, degraded, recovering 
    Active Devices : 2
   Working Devices : 3
    Failed Devices : 1
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status : 2% complete

              Name : ken:0  (local to host ken)
              UUID : b693fe72:4452bd3f:4d995779:ee33bc77
            Events : 91

    Number   Major   Minor   RaidDevice State
       3       8       64        0      spare rebuilding   /dev/sde
       1       8       32        1      active sync   /dev/sdc
       4       8       48        2      active sync   /dev/sdd

       0       8       16        -      faulty   /dev/sdb
複製代碼

 

centos7系統啓動過程及相關配置文件

 應對面試

1.uefi或BIOS初始化,開始post(power on self test)開機自檢內存、磁盤、CPU等。(UEFI更高級,但經常使用BIOS)

2.加載MBR(512字節)到內存,Boot sequence 選擇引導順序。(光盤啓動、硬盤啓動、網絡啓動、U盤啓動等,已在BIOS中設定好第一啓動項),

在虛擬機中,關機狀態下,電源--打開電源時進入固件--Boot--選擇第一啓動項,F10,,其中,由光盤啓動可進入救援模式(root密碼忘記可進入修改)

 

3.GRUB階段,Bootloader(446字節) :引導加載器。引導用戶選擇要啓動的系統或不一樣的內核版本。

4.加載內核和initramfs模塊,KERNEL開始初始化,探測可識別的硬件設備,加載硬件啓動程序。

5.內核開始初始化,在centOS7上使用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這種作法。

 

!!!https://www.cnblogs.com/kenken2018/p/10449938.html

相關文章
相關標籤/搜索