4.磁盤管理和bash的編程思想以及邏輯判斷,參數傳遞和條件測試

講一講磁盤相關的東西
GPT是GUID磁碟分割表(GUID Partition Table)的縮寫

含義“全局唯一標識磁盤分區表”,是一個實體硬盤的分區表的結構佈局的標準

GPT磁盤模式,自糾錯能力強,一塊磁盤上主分區數量不受(4個的)限制,支持大於2T的總容量及大於2T的分區(幾乎沒有上限,最大支持到128個分區,分區大小支持到256TB)。XP系統無法識別GPT磁盤,Win7、Win8可以任意讀寫,但無法安裝操作系統。GPT磁盤只有(也必須是)在使用支持FEI的主板後纔可以安裝Win8。

GPT磁盤的保留分區(隱藏分區)又稱爲FEI保留分區,可以防止將該磁盤掛接到XP系統中被誤認爲是未格式化的磁盤而格式化,導致數據丟失。該保留分區在將硬盤初始化(或轉化)爲GPT模式時自動創建,大小隨硬盤總容量而定。
擴展資料:

在分區數量上,GPT會爲每一個分區分配一個全局唯一的標識符,理論上GPT支持無限個磁盤分區,不過在Windows系統上由於系統的限制,最多隻能支持128個磁盤分區,基本可以滿足所有用戶的存儲需求。

在每一個分區上,這個標識符是一個隨機生成的字符串,可以保證爲地球上的每一個GPT分區都分配完全唯一的標識符。

而在安全性方面,GPT分區表也進行了全方位改進。在早期的MBR磁盤上,分區和啓動信息是保存在一起的。如果這部分數據被覆蓋或破壞,事情就麻煩了。

相對的,GPT在整個磁盤上保存多個這部分信息的副本,因此它更爲健壯,並可以恢復被破壞的這部分信息。GPT還爲這些信息保存了循環冗餘校驗碼(CRC)以保證其完整和正確——如果數據被破壞,GPT會發覺這些破壞,並從磁盤上的其他地方進行恢復。
與普遍使用的主引導記錄(MBR)分區方案相比

GPT分區方案的優點如下:

1、支持2TB以上的大硬盤。

2、每個磁盤的分區個數幾乎沒有限制(Windows系統最多隻允許劃分128個分區)。

3、分區大小幾乎沒有限制,因爲它用64位的整數表示扇區號。

4、分區表自帶備份,在磁盤的首尾部分分別保存了一份相同的分區表,其中一份被破壞後,可以通過另一份恢復。

5、每個分區可以有一個名稱(不同於卷標)。
磁盤和文件系統管理

文件系統管理工具:
創建文件系統的工具
mkfs
mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.xfs, mkfs.vfat, ...
檢測及修復文件系統的工具
fsck
fsck.ext2, fsck.ext3, ...
查看其屬性的工具
dumpe2fs, tune2fs
調整文件系統特性:
tune2fs

內核級文件系統的組成部分:
    文件系統驅動:由內核提供
    文件系統箮理工具:由用戶空間的應用程序提供

ext系列文件系統的管理工具:
    mkfs.ext2, mkfs.ext3, mkfs.ext4
  mkfs -t ext2 = mkfs.ext2

    ext系列文件系統專用管理工具:mke2fs
        mke2fs [OPTIONS]  device
            -t {ext2|ext3|ext4}:指明要創建的文件系統類型
                mkfs.ext4 = mkfs -t ext4 = mke2fs -t ext4
            -b {1024|2048|4096}:指明文件系統的塊大小;
            -L LABEL:指明卷標;
            -j:創建有日誌功能的文件系統ext3;
                mke2fs -j = mke2fs -t ext3 = mkfs -t ext3 = mkfs.ext3
            -i #:bytes-per-inode,指明inode與字節的比率;即每多少字節創建一個Indode;
            -N #:直接指明要給此文件系統創建的inode的數量;
            -m #:指定預留的空間,百分比;

            -O [^]FEATURE:以指定的特性創建目標文件系統;

        e2label命令:卷標的查看與設定
            查看:e2label device
            設定:e2label device LABEL
    tune2fs命令:查看或修改ext系列文件系統的某些屬性
            adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems;
            注意:塊大小創建後不可修改;

            tune2fs [OPTIONS] device
                -l:查看超級塊的內容;

                修改指定文件系統的屬性:
                    -j:ext2 --> ext3;
                    -L LABEL:修改卷標;
                    -m #:調整預留空間百分比;
                    -O [^]FEATHER:開啓或關閉某種特性;

                    -o [^]mount_options:開啓或關閉某種默認掛載選項
                        acl
                        ^acl

        dumpe2fs命令:顯示ext系列文件系統的屬性信息
            dumpe2fs  [-h] device

        用於實現文件系統檢測的工具

            因進程意外中止或系統崩潰等 原因導致定稿操作非正常終止時,可能會造成文件損壞;此時,應該檢測並修復文件系統; 建議,離線進行;

            ext系列文件系統的專用工具:
                e2fsck : check a Linux ext2/ext3/ext4 file system
                    e2fsck [OPTIONS]  device
                        -y:對所有問題自動回答爲yes;
                        -f:即使文件系統處於clean狀態,也要強制進行檢測;

                fsck:check and repair a Linux file system
                    -t fstype:指明文件系統類型;
                        fsck -t ext4 = fsck.ext4
                    -a:無須交互而自動修復所有錯誤;
                    -r:交互式修復;        

CentOS 6如何使用xfs文件系統:
    # yum  -y  ×××tall  xfsprogs
  事先:
            # cd /etc/yum.repos.d/
            # wget  http://172.16.0.1/centos6.7.repo
            #mv CentOS-Base.repo CentOS-Base.repo.bak

    創建:mkfs.xfs
    檢測:fsck.xfs         

blkid命令:
    blkid device
    blkid  -L LABEL:根據LABEL定位設備
    blkid  -U  UUID:根據UUID定位設備

swap文件系統:
    Linux上的交換分區必須使用獨立的文件系統;
        且文件系統的System ID必須爲82;

    創建swap設備:mkswap命令
        mkswap [OPTIONS]  device
            -L LABEL:指明卷標
            -f:強制

Windows無法識別Linux的文件系統; 因此,存儲設備需要兩種系統之間交叉使用時,應該使用windows和Linux同時支持的文件系統:fat32(vfat);
    根文件系統這外的其它文件系統要想能夠被訪問,都必須通過“關聯”至根文件系統上的某個目錄來實現,此關聯操作即爲“掛載”;此目錄即爲“掛載點”;

        掛載點:mount_point,用於作爲另一個文件系統的訪問入口;
            (1) 事先存在;
            (2) 應該使用未被或不會被其它進程使用到的目錄;
            (3) 掛載點下原有的文件將會被隱藏;

    mount命令:
        mount  [-nrw]  [-t vfstype]  [-o options]  device  dir

            命令選項:
                -r:readonly,只讀掛載;
                -w:read and write, 讀寫掛載;
                -n:默認情況下,設備掛載或卸載的操作會同步更新至/etc/mtab文件中;-n用於禁止此特性;

                -t vfstype:指明要掛載的設備上的文件系統的類型;多數情況下可省略,此時mount會通過blkid來判斷要掛載的設備的文件系統類型;

                -L LABEL:掛載時以卷標的方式指明設備;
                    mount -L LABEL dir

                -U UUID:掛載時以UUID的方式指明設備;
                    mount -U UUID dir

            -o options:掛載選項
                sync/async:同步/異步操作;
                atime/noatime:文件或目錄在被訪問時是否更新其訪問時間戳;
                diratime/nodiratime:目錄在被訪問時是否更新其訪問時間戳;
                remount:重新掛載;
                acl:支持使用facl功能;
                    # mount -o acl  device dir
                    # tune2fs  -o  acl  device

                ro:只讀
                rw:讀寫
                dev/nodev:此設備上是否允許創建設備文件;
                exec/noexec:是否允許運行此設備上的程序文件;
                auto/noauto:
                user/nouser:是否允許普通用戶掛載此文件系統;
                suid/nosuid:是否允許程序文件上的suid和sgid特殊權限生效;                    

                defaults:Use default options: rw, suid, dev, exec, auto, nouser, async, and relatime.
   一個使用技巧:
            可以實現將目錄綁定至另一個目錄上,作爲其臨時訪問入口;
                mount --bind  源目錄  目標目錄

        查看當前系統所有已掛載的設備:
            # mount
            #cat  /etc/mtab
             #cat  /proc/mounts

        掛載光盤:
            mount  -r  /dev/cdrom  mount_point

            光盤設備文件:/dev/cdrom, /dev/dvd

        掛載U盤:
            事先識別U盤的設備文件;

        掛載本地的迴環設備:
            # mount  -o  loop  /PATH/TO/SOME_LOOP_FILE   MOUNT_POINT

    umount命令:
        umount  device|dir

        注意:正在被進程訪問到的掛載點無法被卸載;
            查看被哪個或哪些進程所佔用:
                # lsof  MOUNT_POINT
                #fuser -v  MOUNT_POINT

                終止所有正在訪問某掛載點的進程:
                 fuser  -km  MOUNT_POINT

交換分區的啓用和禁用:
    創建交換分區的命令:mkswap

    啓用:swapon
        swapon  [OPTION]  [DEVICE]
            -a:定義在/etc/fstab文件中的所有swap設備;

    禁用:swapoff
        swapoff DEVICE
 設定除根文件系統以外的其它文件系統能夠開機時自動掛載:/etc/fstab文件
    每行定義一個要掛載的文件系統及相關屬性:
        6個字段:
            (1) 要掛載的設備:
                設備文件;
                LABEL
                UUID
                僞文件系統:如sysfs, proc, tmpfs等
            (2) 掛載點
                swap類型的設備的掛載點爲swap;
            (3) 文件系統類型;
            (4) 掛載選項
                defaults:使用默認掛載選項;
                如果要同時指明多個掛載選項,彼此間以事情分隔;
                    defaults,acl,noatime,noexec
            (5) 轉儲頻率
                0:從不備份;
                1:每天備份;
                2:每隔一天備份;
            (6) 自檢次序
                0:不自檢;
                1:首先自檢,通常只能是根文件系統可用1;
                2:次級自檢
                ...

        mount  -a:可自動掛載定義在此文件中的所支持自動掛載的設備;

兩個命令:df和du
    df命令:
        df [OPTION]... [FILE]...
            -l:僅顯示本地文件的相關信息;
            -h:human-readable
            -i:顯示inode的使用狀態而非blocks

    du命令:
        du [OPTION]... [FILE]...
            -s: sumary
            -h: human-readable

練習1:
1、創建一個10G的分區,並格式化爲ext4文件系統;
(1) block大小爲2048;預留空間爲2%,卷標爲MYDATA;
(2) 掛載至/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳;
(3) 可開機自動掛載;
[root@localhost ~]# fdisk /dev/sdb
Select (default p): e
分區號 (1-4,默認 1):1

命令(輸入 m 獲取幫助):n

Select (default p): l
添加邏輯分區 5
起始 扇區 (4096-209715199,默認爲 4096):
將使用默認值 4096
Last 扇區, +扇區 or +size{K,M,G} (4096-209715199,默認爲 209715199):+10G
分區 5 已設置爲 Linux 類型,大小設爲 10 GiB
[root@localhost ~]# cat /proc/partitions,查看是否有分區顯示,如果未顯示
[root@localhost ~]# partx -a /dev/sdb 多刷新2次,就可以顯示了
[root@localhost ~]# mke2fs -t ext4 -b 2048 -m 20 -L MYDATA /dev/sdb5
[root@localhost ~]# tune2fs -l /dev/sdb5 查看文件系統狀態
tune2fs 1.42.9 (28-Dec-2013)
Setting reserved blocks percentage to 20% (1048576 blocks)
[root@localhost ~]# tune2fs -l /dev/sdb5
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name: MYDATA (卷標)
Last mounted on: <not available>
Filesystem UUID: 6f185e68-e442-4981-8805-af0b79766ed1
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 655360
Block count: 5242880
Reserved block count: 1048576 (20%)
Free blocks: 5121266
Free inodes: 655349
First block: 0
Block size: 2048 (塊大小)
Fragment size: 2048
Group descriptor size: 64
Reserved GDT blocks: 512
Blocks per group: 16384
Fragments per group: 16384
Inodes per group: 2048
Inode blocks per group: 256
Flex block group size: 16
Filesystem created: Fri Jun 14 04:03:58 2019
Last mount time: n/a
Last write time: Fri Jun 14 04:09:14 2019
Mount count: 0
Maximum mount count: -1
Last checked: Fri Jun 14 04:03:58 2019
Check interval: 0 (<none>)
Lifetime writes: 65 MB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 28
Desired extra isize: 28
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: 4737d9b8-439b-4e7f-bf38-b76f4a53ab25
Journal backup: inode blocks

[root@localhost ~]# blkid /dev/sdb5 查看文件系統類型
/dev/sdb5: LABEL="MYDATA" UUID="6f185e68-e442-4981-8805-af0b79766ed1" TYPE="ext4"
[root@localhost ~]# mkdir /mydata
[root@localhost ~]# mount /dev/sdb5 -o noexec,noatime /mydata
[root@localhost ~]# mount
/dev/sdb5 on /mydata type ext4 (rw,noexec,noatime,seclabel,data=ordered)
[root@localhost ~]# vim /etc/fstab 修改開機啓動掛載
加入一行:
/dev/sdb5 /mydata ext4 defaults,noexec,noatime 0 0
:wq
保存,umount /mydata現在,然後mount -a 重新掛載,mount查看掛載狀態

2.創建一個大小爲1G的swap分區,並啓動。
[root@localhost ~]# fdisk /dev/sdb
歡迎使用 fdisk (util-linux 2.23.2)。

更改將停留在內存中,直到您決定將更改寫入磁盤。
使用寫入命令前請三思。

命令(輸入 m 獲取幫助):n
Partition type:
p primary (0 primary, 1 extended, 3 free)
l logical (numbered from 5)
Select (default p): l
添加邏輯分區 6
起始 扇區 (20977664-209715199,默認爲 20977664):
將使用默認值 20977664
Last 扇區, +扇區 or +size{K,M,G} (20977664-209715199,默認爲 209715199):+1G
分區 6 已設置爲 Linux 類型,大小設爲 1 GiB

命令(輸入 m 獲取幫助):t
分區號 (1,5,6,默認 6):6
Hex 代碼(輸入 L 列出所有代碼):82
已將分區“Linux”的類型更改爲“Linux swap / Solaris”

命令(輸入 m 獲取幫助):w
[root@localhost ~]# cat /proc/partitions 查看是否讀出新分區,如果未讀出,partx -a /dev/sdb 多執行幾次讀取磁盤信息
[root@localhost ~]# mkswap /dev/sdb6
正在設置交換空間版本 1,大小 = 1048572 KiB
無標籤,UUID=17e846d5-6e86-45f8-bbfc-0293275bd9c2
[root@localhost ~]# swapon /dev/sdb6
[root@localhost ~]# swapon -s 查看是否啓用
文件名 類型 大小 已用 權限
/dev/dm-1 partition 4063228 0 -2
/dev/sdb6 partition 1048572 0 -3
bash腳本編程

腳本文件格式:
    第一行,頂格:#!/bin/bash
    註釋信息:#
    代碼註釋:
    縮進,適度添加空白行;

語言:編程語法格式,庫,算法和數據結構
編程思想:
    問題空間 --> 解空間

變量:
    局部變量
    本地變量
    環境變量

    位置參數變量
    特殊變量

數據類型:字符型、數值型
    弱類型:字符型

算術運算:
    +, -, *, /, %, **

    let  VAR=expression
    VAR=$[expression]
    VAR=$((expression))
    VAR=$(expr argu1 argu2 argu3)

    注意:有些時候乘法符號需要轉義;

    增強型賦值:
        變量做某種算術運算後回存至此變量中;
            let i=$i+#
            let i+=#

        +=,-=,*=, /=, %=

        自增:
            VAR=$[$VAR+1]
            let  VAR+=1
            let  VAR++

        自減:
            VAR=$[$VAR-1]
            let  VAR-=1
            let  VAR--

        文件測試:
            存在性測試
                -a  FILE
                -e  FILE
                    文件的存在性測試,存在則爲真,否則則爲假;
            存在性及類型測試
                -b  FILE:是否存在並且爲 塊設備 文件;
                -c  FILE:是否存在並且爲 字符設備 文件;
                -d  FILE:是否存在並且爲 目錄文件;
                -f  FILE:是否存在並且爲 普通文件;
                -h  FILE或 -L  FILE:是否存在並且爲 符號鏈接文件;
                -p FILE:是否存在且爲 命名管道文件;
                -S  FILE:是否存在且爲 套接字文件;
            文件權限測試:
                -r  FILE:是否存在並且 對當前用戶可讀;
                -w  FILE:是否存在並且 對當前用戶可寫;
                -x  FILE:是否存在並且 對當前用戶可執行;
            特殊權限測試:
                -u  FILE:是否存在並且 擁有suid權限;
                -g  FILE:是否存在並且 擁有sgid權限;
                -k  FILE:是否存在並且 擁有sticky權限;
            文件是否有內容:
                -s  FILE:是否有內容;
            時間戳:
                -N FILE:文件自從上一次讀操作後是否被修改過;
            從屬關係測試:
                -O  FILE:當前用戶是否爲文件的屬主;
                -G  FILE:當前用戶是否屬於文件的屬組;
            雙目測試:
                FILE1  -ef  FILE2:FILE1與FILE2是否指向同一個文件系統的相同inode的硬鏈接;
                FILE1  -nt  FILE2:FILE1是否新於FILE2;
                FILE1  -ot  FILE2:FILE1是否舊於FILE2;

        組合測試條件:
            邏輯運算:
                第一種方式:
                    COMMAND1 && COMMAND2
                    COMMAND1 || COMMAND2
                    ! COMMAND

                    [ -O FILE ] && [ -r FILE ]

                第二種方式:
                    EXPRESSION1  -a  EXPRESSION2
                    EXPRESSION1  -o  EXPRESSION2
                    ! EXPRESSION

                    [ -O FILE -a -x FILE ]

    腳本的狀態返回值:
        默認是腳本中執行的最後一條件命令的狀態返回值;
        自定義狀態退出狀態碼:
            exit  [n]:n爲自己指定的狀態碼;
                注意:shell進程遇到exit時,即會終止,因此,整個腳本執行即爲結束;

向腳本傳遞參數:
    位置參數變量

    myscript.sh  argu1 argu2
        引用方式:
            $1,  $2, ..., ${10}, ${11}, ...

        輪替:
            shift  [n]:位置參數輪替;

特殊變量:
    $0:腳本文件路徑本身;
    $#:腳本參數的個數;
    $*:所有參數
    $@:所有參數

過程式編程語言的代碼執行順序:
    順序執行:逐條運行;
    選擇執行:
        代碼有一個分支:條件滿足時纔會執行;
        兩個或以上的分支:只會執行其中一個滿足條件的分支;
    循環執行:
        代碼片斷(循環體)要執行0、1或多個來回;

    選擇執行:
        單分支的if語句:
            if  測試條件
            then
                代碼分支
            fi

        雙分支的if語句:
            if  測試條件; then
                條件爲真時執行的分支
            else
                條件爲假時執行的分支
            fi    

練習1:
編寫腳本計算/etc/passwd文件中第十個用戶和第二十個用戶id號 之和
#!/bin/bash
#
id1=$(cat /etc/passwd | head -10 | tail -1 | cut -d: -f3)
echo "第十個用戶的uid爲:$id1"
id2=$(cat /etc/passwd | head -20 | tail -1 | cut -d: -f3)
echo "第二十個用戶的uid爲:$id2"
idsum=$[$id1+$id2]
echo "兩個用戶的uid號之和爲:$idsum"
練習2:
將當前主機名保存至hostName變量中,主機名如果爲空,或者未localhost.localdomain,則將設置爲www.magedu.com
#!/bin/bash
#
hostName=$(hostname)
echo "現在的主機名爲$hostName"
if [ -z "$hostName" -o "$hostName" == "localhost.localdomain" ];then
hostname www.magedu.com
echo "主機名變動爲:$(hostname)"
else
echo "主機名無變動"
exit 2
fi
注意事項:-z判斷值是否爲空,空則真,$命令需要括號引用,例$(hostname),$自定義變量引用不需要+括號。判斷時需要用空格隔開。
練習3:編寫腳本,通過命令參數傳輸一個用戶名,判斷id號是偶數還是奇數。
#!/bin/bash
#
if [ $# -lt 1 ];then
echo "請輸入用戶名"
exit 2;
fi
id1=$(id -u $1)
echo "$1的uid爲$id1"
if [ $[$id1%2] -eq 1 ];then
echo "$1的uid是奇數"
else
echo "$1的uid是偶數"
fi
注意事項:做算法需要用[ ]括起來引用其中的值 ,-eq是數值之間判斷是否等於,==是判斷字符是否相同
什麼是LVM

LVM是Logical Volume Manager的簡寫。其是Linux環境下對磁盤分區進行管理的一種機制。LVM由Heinz Mauelshagen在Linux 2.4內核上實現。其主要作用是在不損壞磁盤數據的情況下對磁盤空間進行增加,縮減。LVM的做法是將幾塊物理硬盤通過軟件的方式組合成一塊空間相對大的Volume Group,簡稱VG,然後將這塊大磁盤通過Physical Extend組成可以使用的分區Logical Volume,簡稱LV。將LV格式化之後掛載既能使用

LVM的幾個名詞介紹
PV:Physical Volume,物理卷
PE:Physical Extend,物理塊
VG:Volume Group,卷組
LV:Logical Volume,邏輯卷

LVM常用命令介紹

PV常用命令:
    pvcreate [device]:創建PV
    pvs:顯示pv的簡要信息
    pvdisplay /dev/sd[abcd]#:顯示PV的詳細信息。如果不指定設備,則顯示所有PV詳細信息
    pvremove /dev/sd[abcd]#:刪除PV

VG常用命令:
    vgcreate [–s #[mMgGtT]] VG_NAME PhysicalDevicePath…:創建VG
         -s:指定PE的大小,PE默認大小是4MB
    vgs [VG_NAME]:顯示簡要VG信息
    vgdisplay [VG_NAME]:顯示指定VG的詳細信息,不指定VG則默認顯示全部VG的詳細信息

LV常用命令
    lvcreate –L [+]#[mMgGtT] –n LV_NAME VG_NAME:創建LV
        -L:指定LV的大小
        -n:指定LV的名字
    lvs [LV_NAME]:顯示制指定v的簡要信息,不指定lv默認顯示全部lv的簡要信息
    lvdisplay [LV_NAME]:顯示指定lv的詳細信息,不指定lv默認顯示全部lv的詳細信息
    lvextend -L [+]#[mMgGtT] LV_NAME:擴展LV到指定大小
    lvreduce -L [+]#[mMgGtT] LV_NAME:縮減LV到指定大小
    lvremove /dev/VG_NAME/LV_NAME::刪除LV

LV的抽象表示

示例:LV的創建,擴展和縮減。此處以一塊120G的硬盤爲例,其設備文件是/dev/sda

LV的創建

1. 使用fdisk內建命令創建分區。注意,分區完畢後要將分區文件的System ID 改爲8e: Linux LVM。此處以/dev/sda5, /dev/sda6,/dev/sda7作爲LVM示例

[root@localhost ~]# fdisk -l /dev/sda
Disk /dev/sda: 128.8 GB, 128849018880 bytes, 251658240 sectorsUnits = sectors of 1 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk label type: dosDisk identifier: 0x000c744bDevice Boot Start End Blocks Id System/dev/sda1 2048 1026047 512000 83 Linux/dev/sda2 1026048 89120767 44047360 8e Linux LVM/dev/sda3 89120768 110092287 10485760 83 Linux/dev/sda4 110092288 251658239 70782976 5 Extended/dev/sda5 110094336 120580095 5242880 8e Linux LVM/dev/sda6 120582144 141553663 10485760 8e Linux LVM/dev/sda7 141555712 173012991 15728640 8e Linux LVM

2.  創建pv

[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 42.00g 4.00m
[root@localhost ~]# pvcreate /dev/{sda5,sda6,sda7}
Physical volume "/dev/sda5" successfully created
Physical volume "/dev/sda6" successfully created
Physical volume "/dev/sda7" successfully created
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 42.00g 4.00m
/dev/sda5 lvm2 --- 10.00g 10.00g
/dev/sda6 lvm2 --- 10.00g 10.00g
/dev/sda7 lvm2 --- 5.00g 5.00g

  1. 創建VG,指定PE大小爲16MB

[root@localhost ~]# vgcreate -s 16M myvg /dev/sda5 /dev/sda6 /dev/sda7
Volume group "myvg" successfully created
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 3 0 wz--n- 42.00g 4.00m
myvg 3 0 0 wz--n- 24.95g 24.95g
[root@localhost ~]# vgdisplay myvg
--- Volume group ---
VG Name myvg
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size 24.95 GiB
PE Size 16.00 MiB
Total PE 1597
Alloc PE / Size 0 / 0
Free PE / Size 1597 / 24.95 GiB
VG UUID b2OW0g-eCXR-0oxI-Z8Ft-Jemk-zXON-fnpSb1

4. 創建LV

[root@localhost ~]# lvcreate -L 10G -n mylv myvg
WARNING: ext4 signature detected on /dev/myvg/mylv at offset 1080. Wipe it? [y/n]: y
Wiping ext4 signature on /dev/myvg/mylv.
Logical volume "mylv" created.
[root@localhost ~]# lvdisplay /dev/myvg/mylv
--- Logical volume ---
LV Path /dev/myvg/mylv
LV Name mylv
VG Name myvg
LV UUID 669CDR-JifV-bCou-1QfU-q7VH-0b07-orShqW
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2016-09-07 14:33:17 +0800
LV Status available
open 0
LV Size 10.00 GiB
Current LE 640
Segments 2
Allocation inherit
Read ahead sectors auto

  • currently set to 8192
    Block device 253:2

    1. 格式化LV文件系統

[root@localhost ~]# mke2fs -t ext3 /dev/myvg/mylv
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2684354560
80 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

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
[root@localhost ~]# blkid /dev/myvg/mylv
/dev/myvg/mylv: UUID="4eb1b6ce-3777-4c69-9be1-522ca486d936" SEC_TYPE="ext2" TYPE="ext3"

  1. Mount LV並測試

[root@localhost ~]# mount /dev/myvg/mylv /test_lv/
[root@localhost ~]# cp /var/log/*.log /test_lv/
[root@localhost ~]# ls /test_lv
boot.log lost+found wpa_supplicant.log Xorg.0.log
[root@localhost ~]# umount /testlv
umount: /testlv: mountpoint not found
[root@localhost ~]# umount /dev/myvg/mylv
[root@localhost ~]# mount /dev/myvg//mylv /users
[root@localhost ~]# ls /users
boot.log lost+found wpa_supplicant.log Xorg.0.log
LVM的擴展

1. 擴展LV

[root@localhost ~]# lvextend -L 15G /dev/myvg/mylv
Size of logical volume myvg/mylv changed from 10.00 GiB (640 extents) to 15.00 GiB (960 extents).
Logical volume mylv successfully resized.

2. 擴展文件系統,填充LV的空間

[root@localhost ~]# resize2fs /dev/myvg/mylv 15G
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/myvg/mylv is mounted on /users; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/myvg/mylv is now 3932160 blocks long.

[root@localhost ~]# df -lh
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 20G 3.7G 17G 19% /
devtmpfs 480M 0 480M 0% /dev
tmpfs 495M 152K 495M 1% /dev/shm
tmpfs 495M 7.2M 488M 2% /run
tmpfs 495M 0 495M 0% /sys/fs/cgroup
/dev/mapper/centos-home 20G 36M 20G 1% /home
/dev/sda1 497M 159M 339M 32% /boot
tmpfs 99M 12K 99M 1% /run/user/1000
/dev/sr0 4.1G 4.1G 0 100% /run/media/max/CentOS 7 x86_64
/dev/mapper/myvg-mylv 15G 26M 14G 1% /users

Lvm的縮減:先縮減文件空間,再縮減物理空間

1. 卸載LV

[root@localhost ~]# umount /dev/myvg/mylv

2. 強制檢測文件系統

[root@localhost ~]# e2fsck -f /dev/myvg/mylv
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/myvg/mylv: 14/983040 files (7.1% non-contiguous), 100917/3932160 blocks

3. 縮減文件系統空間到7G

[root@localhost ~]# resize2fs /dev/myvg/mylv 7G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/myvg/mylv to 1835008 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 1835008 blocks long.

4. 縮減LV空間至7G

[root@localhost ~]# lvs /dev/myvg/mylv
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mylv myvg -wi-a----- 15.00g
[root@localhost ~]# lvreduce -L 7G mylv
Path required for Logical Volume "mylv".
Please provide a volume group name
Run `lvreduce --help' for more information.
[root@localhost ~]# lvreduce -L 7G /dev/myvg/mylv
WARNING: Reducing active logical volume to 7.00 GiB
[root@localhost ~]# lvs /dev/myvg/mylv
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mylv myvg -wi-a----- 7.00g

5. 掛載並測試

[root@localhost ~]# mount /dev/myvg/mylv /users
[root@localhost ~]# ls /users
boot.log lost+found wpa_supplicant.log Xorg.0.log
[root@localhost ~]# cat /users/Xorg.0.log
[ 30.065]
X.Org X Server 1.17.2

注意事項:增加空間可以直接在掛載的情況下直接增加,縮減需要先卸載,再e2fsck -f強制檢測文件系統文件,然後resize2fs縮減文件系統,再縮減磁盤空間。然後掛載,方可使用。

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