linux 系統管理之磁盤陣列RAID和壓縮命令

什麼是RAID

RAID:Redundant Arrays of Inexpensive Disks

即:廉價磁盤冗餘陣列

Redundant Arrays of Independent Disks

獨立磁盤冗餘陣列

1988年由加利福尼亞大學伯克利分校(University of California-Berkeley)提出的“A Case for Redundant Arrays of Inexpensive Disks”。

旨在將多個相對廉價的IDE接口的磁盤合成一個“陣列”來提供更好的IO性能、實現磁盤冗餘,或者兩者都提供。


RAID

提高IO能力:

磁盤並行讀寫

提高耐用性;

磁盤冗餘來實現

級別:多塊磁盤組織在一起的工作方式有所不同

RAID實現的方式:

外接式磁盤陣列:通過擴展卡提供適配能力

內接式RAID:主板集成RAID控制器

安裝OS前在BIOS裏配置

Software RAID:


RAID級別

RAID-0:條帶卷,strip

RAID-1: 鏡像卷,mirror

RAID-2

..

RAID-5

RAID-6

RAID-10

RAID-01


RAID-0:

讀、寫性能提升;

可用空間:N*min(S1,S2,...)

無容錯能力

最少磁盤數:2, 2

RAID-1:

讀性能提升、寫性能略有下降;

可用空間:1*min(S1,S2)

有冗餘能力

最少磁盤數:2, 2+

RAID-4:

多塊數據盤異或運算值,存於專用校驗盤

壞了一塊硬盤仍然可以繼續工作的模式稱爲降級模式

校驗盤壓力最大,很容易形成性能瓶頸;

RAID-5:

讀、寫性能提升

可用空間:(N-1)*min(S1,S2,...)

有容錯能力:允許最多1塊磁盤損壞

最少磁盤數:3, 3+

RAID-6:

讀、寫性能提升

可用空間:(N-2)*min(S1,S2,...)

有容錯能力:允許最多2塊磁盤損壞

最少磁盤數:4, 4+


RAID混合類型級別

RAID-10:

讀、寫性能提升

可用空間:N*min(S1,S2,...)/2

有容錯能力:每組鏡像最多隻能壞一塊

最少磁盤數:4, 4+

RAID-01、RAID-50

RAID7:可以理解爲一個獨立存儲計算機,自身帶有操作系統和管理工具,可以獨立運行,理論上性能最高的RAID模式

JBOD:Just a Bunch Of Disks

功能:將多塊磁盤的空間合併一個大的連續空間使用

可用空間:sum(S1,S2,...)

常用級別:RAID-0, RAID-1, RAID-5, RAID-10, RAID-50, JBOD


實現方式:

硬件實現方式

軟件實現方式


CentOS 6上的軟件RAID的實現:

結合內核中的md(multi devices)模塊實現;


mdadm:模式化工具

命令的語法格式:

mdadm [mode] <raiddevice> [options] <component-devices>

支持的RAID級別:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10,...

模式:

創建模式:-C

裝配模式:-A

監控模式:-F

管理模式:-f, -r, -a


<raiddevice>:/dev/md#

<component-devices>:任意塊設備,注意如果是分區的話,其分區類型要改爲fd


-C:創建模式

-n #:使用#個塊設備來創建此RAID

-l #:指明要創建的RAID的級別

-a {yes|no}:自動創建目標RAID設備的設備文件

-c CHUNK_SIZE:指明塊大小, 默認值爲512K

-x #:指明空閒盤的個數


例如:創建一個10GB可用空間的RAID5


混雜模式

顯示RAID的詳細信息

-D

mdadm -D /dev/md#

停止md設備:

mdadm -S /dev/md0


管理模式:

-f:爲指定的磁盤或分區添加損壞標記

-a:添加磁盤或分區到md設備中

-r:從md設備中移除磁盤或分區


裝配模式:Assemble

-A

用於將停止的RAID設備重新裝配使之能夠正常工作。

在裝配RAID設備的時候,需要依賴/etc/mdadm.conf文件進行


mdadm -D --scan >> /etc/mdadm.conf

mdadm -S /dev/md2

mdadm -S /dev/md0

mdadm -C -n 2 -l 0 /dev/sdc /dev/sdf

mdadm -A /dev/md2

mdadm /dev/md2 -a /dev/md0


觀察md的狀態:

cat /proc/mkstat


watch命令:

-n #:刷新時間間隔,單位爲秒,默認爲1秒;

watch -n # 'COMMAND'

LVM2

Logical Volume Manager,邏輯卷管理器,Version 2

IBM


使用純軟件的方式組織一個或多個底層的塊設備,將它們重新定義爲一個邏輯塊設備的解決方案;


利用內核中的dm模塊實現;

dm:device mapper,設備映射表

dm模塊可以將一個或多個底層塊設備組織成一個邏輯塊設備;

用戶空間中的相應命令來向dm模塊發出系統調用,就可以完成後邏輯塊設備的管理;


邏輯塊設備統一存放在/dev/dm-#


使用DM機制實現LVM管理的步驟:

1.創建並表示物理卷,PV

注意:如果用來創建物理卷的設備是普通分區,一定要將分區的ID修改爲8e;

2.基於PV創建卷組,邏輯塊設備,創建的卷組的同時指定PE的大小;

注意:一旦PE大小被指定,就不允許更改;

3.在已經創建的卷組中創建邏輯卷

4.在邏輯卷中創建文件系統(高級格式化)

5.掛載


物理卷的管理操作:

pvcreate:創建物理卷

pvdisplay:顯示物理卷的詳細信息

pvs:顯示物理卷的簡單信息

pvremove:刪除物理卷

pvmove:將某個物理卷中的所有的PE移動到其他物理卷中;


卷組的管理操作:

vgcreate:創建卷組

-s #{kKmMgG}:指定PE的大小,如果省略該選項,默認的PE爲4M;

vgremove:刪除卷組

vgextend:擴展卷組容量,將新的pv添加到卷組中

vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]

vgreduce:縮減卷組容量,將pv從卷組中移除;在做此操作之前,應該先使用pvmove,保證被移除的pv上沒有被佔用的PE;

vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]

vgdisplay:顯示卷組的詳細信息

vgs:顯示卷組的簡短信息


邏輯卷的管理操作:

lvcreate:創建邏輯卷

-L LV_SIZE(#{kK|mM|gG}):指定邏輯卷的大小,不能超過卷組的容量;

-l #%{FREE|VG|ORIGIN|PVS}:指定邏輯卷佔用對應存儲單元的百分比;

-n LV_NAME:指定邏輯卷的名稱

-i #:在創建邏輯卷的時候,以條帶的方式創建,並指明這個邏輯捲上有#個條帶

-I #:在創建邏輯卷的時候,以條帶的方式創建,並指明CHUNK的大小;

lvremove:移除邏輯卷

lvdisplay:顯示邏輯卷的詳細信息

lvs:顯示邏輯卷的簡短信息

lvchange:修改LV的狀態

-ay:激活邏輯卷

-an:停用邏輯卷

lvextend:擴展邏輯卷的空間,

注意:一定要先擴展邏輯卷的物理邊界,再擴展邏輯卷的邏輯邊界;

使用ext系列文件系統的時候,resize2fs命令擴展邏輯邊界;


擴大邏輯卷的物理邊界:

    lvextend -L [+]SIZE /PATH/TO/LVM

      如果SIZE有+:表示在原有邏輯卷容量的基礎上,增加SIZE空間

      如果SIZE無+:表示將邏輯卷的容量擴大到SIZE空間

    擴大邏輯卷的邏輯邊界:

      e2fsck /PATH/TO/LVM

      resize2fs [-f] /PATH/TO/LVM

lvreduce:縮減邏輯卷的空間

注意:先縮減邏輯卷的邏輯邊界,再縮減邏輯卷的物理邊界;

使用ext系列文件系統的時候,resize2fs命令縮減邏輯邊界

 

    lvreduce -L [-]SIZE /PATH/TO/LVM

如果SIZE有-:表示在原有邏輯卷容量的基礎上,削減SIZE空間

如果SIZE無-:表示將邏輯卷的容量直接削減至SIZE空間

   umount /PATH/TO/LVM

   e2fsck /PATH/TO/LVM            //強制校驗數據一致性

   resize2fs -f /PATH/TO/LVM LV_SiZE //修改邏輯卷的邏輯邊界,LV_SIZE爲調整後的邏輯卷大小

   lvchange -an /PATH/TO/LVM      //關閉邏輯卷

   lvreduce -L [+]SIZE /PATH/TO/LVM  //修改邏輯卷的物理邊界,大小要和邏輯邊界保持一致

   lvchange -ay /PATH/TO/LVM      //重新激活邏輯卷

   mount /PATH/TO/LVM /PATH/TO/LVM_MOUNT_POINT


爲了更方便的使用邏輯卷,爲/dev/dm-#設備創建了兩個符號鏈接文件:

/dev/mapper/VG_NAME-LV_NAME --> ../dm-#

/dev/VG_NAME/LV_NAME --> ../dm-#


邏輯卷的快照:

快照,本身也是一種邏輯卷;目標邏輯卷的另外一個訪問路徑;


快照是特殊的邏輯卷,它是在生成快照時存在的邏輯卷的準確拷貝

對於需要備份或者複製的現有數據集臨時拷貝以及其它操作來說,快照是最合適的選擇。

快照只有在它們和原來的邏輯卷不同時纔會消耗空間。

在生成快照時會分配給它一定的空間,但只有在原來的邏輯卷或者快照有所改變纔會使用這些空間

當原來的邏輯卷中有所改變時,會將舊的數據複製到快照中。

快照中只含有原來的邏輯卷中更改的數據或者自生成快照後的快照中更改的數據

也可以使用lvextend擴展快照卷。


快照就是將當時的系統信息記錄下來,就好像照相一般,若將來有任何數據改動了,則原始數據會被移動到快照區,沒有改動的區域則由快照區和文件系統共享。


由於快照區與原本的LV共用很多PE的區塊,因此快照去與被快照的LV必須要要在同一個VG上!系統恢復的時候的文件數量不能高於快照區的實際容量。


快照邏輯卷

  lvcreate -L SNAPSHOT_SIZE -s -p r -n SNAPSHOT_NAME /PATH/TO/ORIGIN_LVM

    -L SIZE:指定快照邏輯卷的大小

    -s:創建一個快照邏輯卷

    -p r:創建處理的邏輯卷是隻讀權限

    -n SNAPSHOT_NAME:指定快照邏輯卷的名稱

壓縮:

  

Linux系統中常有的壓縮和解壓縮工具:

壓縮:以時間換空間的一種操作;

壓縮的原理:標記和替換

壓縮比:壓縮之前與壓縮之後的文件的大小的比值;

純文本文件壓縮比較大

視頻、圖像等文件壓縮比小


能夠實現壓縮功能的工具:

compress/uncompress:.Z擴展名

gzip/gunzip:.gz擴展名

bzip2/bunzip2:.bz2擴展名

xz/unxz:.xz擴展名,目前壓縮比最高的工具

zip/unzip:.zip擴展名


gzip:

gzip, gunzip, zcat - compress or expand files

-d:解壓縮

-#:以指定的壓縮比進行壓縮,1-9,9爲最高級;默認6

-c:將壓縮結果輸出到標準輸出,不會對原文件進行壓縮;

gzip -c /PATH/TO/FILE > /PATH/TO/COMPRESS_FILE.gz


bzip2:

bzip2, bunzip2 - a block-sorting file compressor, v1.0.4

  bzcat - decompresses files to stdout

  -d:解壓縮

  -#:指定壓縮比進行壓縮,1-9,默認爲6

  -k:保留原文件不刪除,創建新的壓縮文件;


xz:

xz, unxz, xzcat - Compress or decompress .xz files

-d:解壓縮

  -#:指定壓縮比進行壓縮,1-9,默認爲6

  -k:保留原文件不刪除,創建新的壓縮文件;


tar:歸檔程序

tar——tape archive:磁帶檔案

tar [OPTION...] [FILE]...

主選項:

-c:創建檔案文件

-x:釋放檔案文件的內容

-t:查看檔案文件中包含的文件

-u/-r:向檔案文件中添加新的文件


輔助選項:

-f:指定檔案的文件的路徑

-C:在釋放檔案文件中的內容時,指定釋放的路徑;

-z:在創建檔案文件時,調用gzip進行壓縮

-j:在創建檔案文件時,調用bzip2進行壓縮

-J:在創建檔案文件時,調用xz進行壓縮(可能不支持)

--exclude:在釋放檔案文件時,排除某個文件;

-k:在釋放檔案文件時,不會覆蓋同名文件;


cpio


寫一個腳本:給腳本傳遞幾個文件,選擇壓縮方式進行壓縮;

#!/bin/bash

#

read -p "Please input some files:" file

select I in gzip bzip2 xz ; do

 case $I in 

   gzip)

     gzip file

     ;;

   bzip2)

     bzip2 file

     ;;

   xz)

     xz file

     ;;

   *)

     echo "Input again some files:"

     ;;

 esac

done


#!/bin/bash

#

filedest=/usr/bin/file

read -p "Please input some files:" file1 file2 file3 file4

select I in gzip bzip2 xz ; do

 case $I in 

   gzip)

     tar -czf ${filedest}.tar.gz file1 file2 file3 file4

     ;;

   bzip2)

     tar -cjf ${filedest}.tar.bz2 file1 file2 file3 file4 

     ;;

   xz)

     tar -cJf ${filedest}.tar.xz file1 file2 file3 file4

     ;;

   *)

     echo "Input again some files:"

     ;;

 esac

done


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章