第五周-磁碟分區GPT、shell腳本練習、lvm詳解

来源:https://www.cnblogs.com/gx22/archive/2018/12/09/10093494.html
-Advertisement-
Play Games

1、 描述GPT是什麼,應該怎麼使用 Linux中磁碟分區分為MBR和GPT。 MBR全稱為Master Boot Record,為主引導記錄,是傳統的分區機制,應用於絕大多數使用的BIOS的PC設備。 MBR分區的特點: 1、MBR支持32位和64位的系統 2、MBR支持分區數量有限 3、MBR只 ...


1、 描述GPT是什麼,應該怎麼使用

Linux中磁碟分區分為MBR和GPT。

MBR全稱為Master Boot Record,為主引導記錄,是傳統的分區機制,應用於絕大多數使用的BIOS的PC設備。

MBR分區的特點:

1、MBR支持32位和64位的系統

     2、MBR支持分區數量有限

     3、MBR只支持不超過2T的硬碟,超過2T的硬碟將只能用2T空間。

GPT(全稱為GUID Partition Table)分區為全局唯一分區表,是一個較新的分區機制,解決了MBR很多缺點

GPT分區的特點:

1、支持超過2T的磁碟(64位定址)。Fdisk最大隻能建立2TB大小的分區

     2、向後相容MBR

     3、必須在支持UEFI的硬體上才能使用(Intel提出,用於取代BIOS)

4、 必須使用64位系統

5、 Mac、Linux、Windows7/8 64bit、windows Server2008 64bits系統都能支持GPT分區格式

GPT磁碟分區是使用parted工具實現的:

Parted用法個常用選項:

用法:parted [選項]… [設備 [ 命令 [參數]… ]… ]

     將帶有參數的命令用於設備。如果沒有出現命令,則以交互模式運行。

幫助選項:

    -h,--help 顯示此幫助信息

    -l , --list 列出所有設備的分區信息

    -I , --interactive 在必要是,提示用戶

    -s, --script 從不提示用戶

    -v , --version 顯示版本

     操作命令:

        Minot # 對文件系統進行一個簡單的檢查

        cp [FROM-DEVICE] FROM-MINOR TO-MINOR   #將文件系統複製到另一個分區

        help [COMMAND]    #列印通用求助信息,或關於command信息

        mklable 標簽類型    #創建新的磁碟標簽(分區表)

        mkfs MINOR 文件系統類型  #在MINOR創建類型為“文件系統類型”的文件系統

        mkpart 分區類型 [文件系統類型] 起始點 終止點  #創建一個分區

        mkpartfs 分區類型 文件系統類型 起始點 終止點  #創建一個帶有文件系統的分區

        move MINOR 起始點 終止點    #移動編號為MINOR的分區

        name MINOR 名稱      #將編號為MINOR的分區命名為“名稱”

        print [MINOR]     #列印分區表,或者分區 

quit          #退出程式 

rescue 起始點 終止點    #輓救臨近“起始點”、“終止點”的遺失的分區 

resize MINOR 起始點 終止點  #改變位於編號為 MINOR 的分區中文件系統的大小 

rm MINOR         #刪除編號為 MINOR 的分區 

select 設備       #選擇要編輯的設備 

set MINOR 標誌 狀態     #改變編號為 MINOR 的分區的標誌

示例:

步驟1、使用parted 工具在設備/dev/sdb上創建磁碟分區

 1 [root@localhost ~]# parted /dev/sdb
 2 
 3 GNU Parted 3.1
 4 
 5 Using /dev/sdb
 6 
 7 Welcome to GNU Parted! Type 'help' to view a list of commands.
 8 
 9 (parted)
10 
11  

 

步驟2、接下來需要創建一個分區表(在parted中可以使用help命令列印幫助信息):

 (parted) mklabel  

New disk label type? gpt        #我們要正確分區大於2TB的磁碟,應該使用gpt方式的分區表,輸入gpt後回車)                                           

(parted) mkpart

Partition name?  []? myNewGPT         #輸入創建新區的名字

File system type?  [ext2]? ext4           #輸入創建信息的文件系統的類型,如果為ext2類型可直接按回車鍵             

Start? 0                              #輸入分區的起始點

End? 5G                              #輸入分區的終止點;GPT分區和MBR分區不同,這裡可直接輸入起始點如從0開始到5G大小

Warning: The resulting partition is not properly aligned for best performance.         #這裡警告新建分區會格式化分區內容

Ignore/Cancel? I                                                          #忽略/取消                                                      

(parted)   

 

 

步驟3、我們已經創建好了一個分區,下麵使用print命令列印出來看                                                    

(parted) print                                                            

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sdb: 21.5GB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

Disk Flags:

Number  Start   End     Size    File system  Name      Flags

 1      17.4kB  5000MB  5000MB               myNewGPT

 

(parted)

 

 

步驟4、如果分區錯了,可以使用rm命令刪除分區,後面跟分區的編號,比如我們要刪除上面的分區1,然後列印刪除後的結果

(parted) rm 1

(parted) print                                                           

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sdb: 21.5GB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

Disk Flags:

Number  Start  End  Size  File system  Name  Flags

(parted)  

 

 

步驟5、由於parted內建的mkfs還不夠完善,所以完成以後我們可以使用quit命令退出parted並使用 系統的mkfs命令對分區進行格式化了,此時如果使用fdisk -l命令列印分區表會出現警告信息,這是正常的 

[root@localhost ~]# fdisk -l /dev/sdb                                    

WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

 

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: gpt

Disk identifier: E53CF9CC-6556-41C1-B188-25735A0928F7

 

 

#         Start          End    Size  Type            Name

1                 34      9765625    4.7G  Microsoft basic myFirstGPT

 

 

步驟6、格式化文件系統

[root@localhost ~]# mkfs.ext4 /dev/sdb

mke2fs 1.42.9 (28-Dec-2013)

/dev/sdb is entire device, not just one partition!

Proceed anyway? (y,n) y

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks

1310720 inodes, 5242880 blocks

262144 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=2153775104

160 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

 

Allocating group tables: done                           

Writing inode tables: done                           

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done  

 

[root@localhost ~]#

 

 

步驟7、掛載

[root@localhost ~]# mkdir /mnt/myFirstGPT

[root@localhost ~]# mount /dev/sdb /mnt/myFirstGPT/

 

 

2、 創建一個10G的分區,並格式化為etx4文件系統。要求:

[root@localhost ~]# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.23.2).

 

Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.

 

Device does not contain a recognized partition table

Building a new DOS disklabel with disk identifier 0x3a339f3a.

 

Command (m for help): n

Partition type:

   p   primary (0 primary, 0 extended, 4 free)

   e   extended

Select (default p): p

Partition number (1-4, default 1): 1

First sector (2048-41943039, default 2048):

Using default value 2048

Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +10G

Partition 1 of type Linux and of size 10 GiB is set

 

Command (m for help): w

 

(1)     block大小為2048,預留空間20%,捲標為MYDATA

[root@localhost ~]# mkfs -t ext4 -b 2048 -m 20 -L MYDATA /dev/sdb1

mke2fs 1.42.9 (28-Dec-2013)

Filesystem label=MYDATA

OS type: Linux

Block size=2048 (log=1)

Fragment size=2048 (log=1)

Stride=0 blocks, Stripe width=0 blocks

655360 inodes, 5242880 blocks

1048576 blocks (20.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=273678336

320 block groups

16384 blocks per group, 16384 fragments per group

2048 inodes per group

Superblock backups stored on blocks:

    16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816, 1327104,

    2048000, 3981312

 

Allocating group tables: done                           

Writing inode tables: done                           

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done  

 

[root@localhost ~]#

 

(2)     掛載/mydata目錄,要求掛載時禁止程式自動運行,且不更新文件的訪問時間戳

[root@localhost ~]# mkdir /mydata

[root@localhost ~]# mount -o noatime,noexec /dev/sdb1 /mydata

 

(3)     可開機自動掛載

[root@localhost ~]# blkid /dev/sdb1

/dev/sdb1: LABEL="MYDATA" UUID="af467f45-8b5c-426f-9aa6-6327e0a4e064" TYPE="ext4"

[root@localhost ~]# vim /etc/fstab

UUID=af467f45-8b5c-426f-9aa6-6327e0a4e064 /mydata                 ext4    defaults        0 0

[root@localhost ~]# mount –a

 

 

5、 創建一個大小為1G的swap分區,並啟用

[root@localhost ~]# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.23.2).

 

Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.

 

 

Command (m for help): n

Partition type:

   p   primary (1 primary, 0 extended, 3 free)

   e   extended

Select (default p): p

Partition number (2-4, default 2): 2

First sector (20973568-41943039, default 20973568):

Using default value 20973568

Last sector, +sectors or +size{K,M,G} (20973568-41943039, default 41943039): +1G

Partition 2 of type Linux and of size 1 GiB is set

 

Command (m for help): t

Partition number (1,2, default 2): 2

Hex code (type L to list all codes): 82

Changed type of partition 'Linux' to 'Linux swap / Solaris'

 

Command (m for help): w

The partition table has been altered!

 

Calling ioctl() to re-read partition table.

 

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.

The kernel still uses the old table. The new table will be used at

the next reboot or after you run partprobe(8) or kpartx(8)

Syncing disks.

[root@localhost ~]# fdisk -l /dev/sdb

 

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Disk identifier: 0x3a339f3a

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1            2048    20973567    10485760   83  Linux

/dev/sdb2        20973568    23070719     1048576   82  Linux swap / Solaris

[root@localhost ~]# mkswap /dev/sdb2

[root@localhost ~]# swapon /dev/sdb3

 

 

6、 編寫腳本計算/etc/passwd文件中第10個用戶和第20個用戶id之和

#!/bin/bash

#fileName addId.sh

#author gongxu

#data 2019/12/9

id1=$(head -10  /etc/passwd | tail -1  | cut  -d:  -f3)
id2=$(head -20   /etc/passwd | tail -1  | cut  -d:  -f3)

id_sum=$[$id1+$id2]

echo “id_sum=$id_sum”

執行腳本:

 [root@localhost ~]# bash .addId.sh

“id_sum=1008”

 

 

7、 將當前主機名保存至hostName變數中,主機名如果為空,或者為localhost.localdomain則將設置為www.magedu.com

hostName=$(hostname)

[ -z "$hostName" -o "$hostName" == "localhost.localdomain" -o "$hostName" == "localhost" ] && hostname www.magedu.com           

 

                                

                                           

 

8、 編寫腳本,通過命令行參數傳入一個用戶名,判斷id的偶數還是奇數

#!/bin/bash

#
If ![ $# -eq 1 ] ;then

  echo “please input at lessest one userName”

  exit 2

fi

$uid = grep “^$1\>” /etc/passwd | cut –d: -f3

$uid_yu = $uid % 2

If $uid_yu –eq 0 ; then

  echo “$1的ID號為偶數else

  echo “$1的ID號為奇數”

fi         

 

 

 

Lvm基本應用以及擴展縮減實現(轉載自:http://blog.csdn.net/ikikik2002/article/details/5187276)

一、 前言
LVM是邏輯捲管理(Logical Volume Manager)的簡稱,他是建立在物理存儲設備之上的一個抽象層,允許你生成邏輯存儲捲,和直接使用物理存儲在管理上相比,提供了更好靈活性。
LVM將存儲虛擬化,使用邏輯捲,你不會受限於物理磁碟的大小,另外,和硬體相關的存儲設置被其隱藏,你能不用停止應用或卸載文件系統來調整捲大小或數據遷移.這樣能減少操作成本.
LVM和直接使用物理存儲相比,有以下好處:
1. 靈活的容量.
當使用邏輯捲時,文件系統能擴展到多個磁碟上,你能聚合多個磁碟或磁碟分區成單一的邏輯捲.

2.可伸縮的存儲池.
你能使用簡單的命令來擴大或縮小邏輯捲大小,不用重新格式化或分區磁碟設備.

3.線上的數據再分配.
你能線上移動數據,數據能在磁碟線上的情況下重新分配.比如,你能線上更換可熱插拔的磁碟.

4. 方便的設備命名
邏輯捲能按你覺得方便的方式來起所有名稱.

5.磁碟條塊化.
你能生成一個邏輯盤,他的數據能被條塊化存儲在2個或更多的磁碟上.這樣能明顯提升數據吞吐量.

6.映像捲
邏輯捲提供方便的方法來映像你的數據.

7.捲快照
使用邏輯捲,你能獲得設備快照用來一致性備份或測試數據更新效果而不影響真實數據.

二、 LVM基本術語
前面談到,LVM是在物理存儲上添加的一個邏輯層,來為文件系統屏蔽下麵的硬體存儲設備,提供了一個抽象的盤捲,在盤捲上建立文件系統。首先我們討論以下幾個LVM術語:

* 物理存儲介質(The Physical Media)
這裡指系統的存儲設備,如:/dev/hda1、/dev/sda等等,是存儲系統最低層的存儲單元。

* 物理捲(PV, Physical Volume)
物理捲就是指磁碟,磁碟分區或從邏輯上和磁碟分區具有同樣功能的設備(如RAID),是LVM的基本存儲邏輯塊,但和基本的物理存儲介質(如分區、磁碟等)比較,卻包含有和LVM相關的管理參數。當前LVM允許你在每個物理捲上保存這個物理捲的0至2份元數據拷貝.預設為1,保存在設備的開始處.為2時,在設備結束處保存第二份備份.

* 捲組(VG, Volume Group)
LVM捲組類似於非LVM系統中的物理硬碟,其由物理捲組成。能在捲組上創建一個或多個“LVM分區”(邏輯捲),LVM捲組由一個或多個物理捲組成。

* 邏輯捲(LV, Logical Volume)
LVM的邏輯捲類似於非LVM系統中的硬碟分區,在邏輯捲之上能建立文件系統(比如/home或/usr等)。

*線性邏輯捲 (Linear Volumes)
一個線性邏輯捲聚合多個物理捲成為一個邏輯捲.比如,如果你有兩個60GB硬碟,你能生成120GB的邏輯捲.

*條塊化的邏輯捲(Striped Logical Volumes)
當你寫數據到此邏輯捲中時,文件系統能將數據放置到多個物理捲中.對於大量連接讀寫操作,他能改善數據I/O效率.

*映像的邏輯捲(Mirrored Logical Volumes)
映像在不同的設備上保存一致的數據.數據同時被寫入原設備及映像設備.他提供設備之間的容錯。

*快照捲(Snapshot Volumes)
快照捲提供在特定瞬間的一個設備虛擬映像,當快照開始時,他複製一份對當前數據區域的改動,由於他優先執行這些改動,所以他能重構當前設備的狀態。

* PE(physical extent)
每一個物理捲被劃分為稱為PE(Physical Extents)的基本單元,具有唯一編號的PE是能被LVM定址的最小單元。PE的大小是可設置的,預設為4MB。

* LE(logical extent)
邏輯捲也被劃分為被稱為LE(Logical Extents) 的可被定址的基本單位。在同一個捲組中,LE的大小和PE是相同的,並且一一對應。

和非LVM系統將包含分區信息的元數據保存在位於分區的起始位置的分區表中相同,邏輯捲及捲組相關的元數據也是保存在位於物理捲起始處的VGDA(捲組描述符區域)中。VGDA包括以下內容: PV描述符、VG描述符、LV描述符、和一些PE描述符 。系統啟動LVM時激活VG,並將VGDA載入至記憶體,來識別LV的實際物理存儲位置。當系統進行I/O操作時,就會根據VGDA建立的映射機制來訪問實際的物理位置。

三、 安裝LVM
首先確定系統中是否安裝了lvm工具:
[root@test2 root]# rpm ?qa|grep lvm
lvm-x-x-x
如果命令結果輸入類似於上例,那麼說明系統已安裝了LVM管理工具;如果命令沒有輸出則說明沒有安裝LVM管理工具,則需要從網路下載或從光碟裝LVM rpm工具包。

安裝了LVM的RPM軟體包以後,要使用LVM還需要設置內核支持LVM。RedHat預設內核是支持LVM的,如果需要重新編譯內核,則需要在設置內核時,進入Multi-device Support (RAID and LVM)子菜單,選中以選項:

  • Multiple devices driver support (RAID and LVM)
       Device mapper support 
         Snapshot target (EXPERIMENTAL) 
         Mirror target (EXPERIMENTAL)                                                           
    然後重新編譯內核,即可將LVM的支持添加到新內核中。

    為了使用LVM,要確保在系統啟動時激活LVM,在RedHa的版本中,系統啟動腳本已具有對激活LVM的支持,在/etc/rc.d/rc.sysinit中有以下內容:
     
    if [ -x /sbin/lvm.static ]; then
              action $"Setting up Logical Volume Management:" /sbin/lvm.static vgchange -a y --ignorelockingfailure
    fi
    vgchange -a y命令激活系統所有捲組。

    四、 創建和管理LVM
    要創建一個LVM系統,一般需要經過以下步驟:
    1、 創建分區
    使用分區工具(如:fdisk等)創建LVM分區,方法和創建其他一般分區的方式是相同的,差別僅僅是LVM的分區類型為8e。
    # fdisk -l /dev/sdb /dev/sdc
    Disk /dev/sdb: 18.2 GB, 18200739840 bytes
    255 heads, 63 sectors/track, 2212 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Disk /dev/sdb doesn’t contain a valid partition table
    Disk /dev/sdc: 18.2 GB, 18200739840 bytes
    255 heads, 63 sectors/track, 2212 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Device Boot      Start         End      Blocks   Id  System
    /dev/sdc1               1         200     1606468+  8e  Linux LVM
    如果要將使用整塊盤,能通過下麵的命令來覆蓋磁碟上的原有分區信息:
    #dd if=/dev/zero of=/dev/sdc bs=512 count=1
      
    2、 創建物理捲
    創建物理捲的命令為pvcreate,利用該命令將希望添加到捲組的所有分區或磁碟創建為物理捲。將整個磁碟創建為物理捲的命令為:
    # pvcreate /dev/sdb
    Physical volume "/dev/sdb" successfully created
      
    將單個分區創建為物理捲的命令為:
    # pvcreate /dev/sdc1
    Physical volume "/dev/sdc1" successfully created
    也能同時生成多個捲:
    #pvcreate /dev/sdb /dev/sdc1

    3、掃描塊設備
    通過lvmdiskscan能看到那些設備成為了物理捲.
    #lvmdiskscan
      /dev/ramdisk             [       16.00 MB] 
      /dev/sda                 [        4.00 GB] 
      /dev/root                [        2.88 GB] 
      /dev/ram                 [       16.00 MB] 
      /dev/sda1                [      101.94 MB] 
      /dev/VolGroup00/LogVol01 [        1.00 GB] 
      /dev/ram2                [       16.00 MB] 
      /dev/sda2                [        3.90 GB] LVM physical volume
      /dev/lvm_test/test       [      508.00 MB] 
      /dev/ram3                [       16.00 MB] 
      /dev/ram4                [       16.00 MB] 
      /dev/ram5                [       16.00 MB] 
      /dev/ram6                [       16.00 MB] 
      /dev/ram7                [       16.00 MB] 
      /dev/ram8                [       16.00 MB] 
      /dev/ram9                [       16.00 MB] 
      /dev/ram10               [       16.00 MB] 
      /dev/ram11               [       16.00 MB] 
      /dev/ram12               [       16.00 MB] 
      /dev/ram13               [       16.00 MB] 
      /dev/ram14               [       16.00 MB] 
      /dev/ram15               [       16.00 MB] 
      /dev/sdb                 [      512.00 MB] LVM physical volume
      /dev/sdc                 [      512.00 MB] LVM physical volume
      5 disks
      16 partitions
      2 LVM physical volume whole disks
      1 LVM physical volume

    4、顯示物理捲
    能使用pvs,pvscan,pvdisplay來顯示當前系統中的物理捲.
    #pvs
      PV         VG         Fmt  Attr PSize   PFree  
      /dev/sda2  VolGroup00 lvm2 a-     3.88G      0 
      /dev/sdb   lvm_test   lvm2 a-   508.00M      0 
      /dev/sdc              lvm2 --   512.00M 512.00M
    #pvscan 
      PV /dev/sdb    VG lvm_test     lvm2 [508.00 MB / 0    free]
      PV /dev/sda2   VG VolGroup00   lvm2 [3.88 GB / 0    free]
      PV /dev/sdc                    lvm2 [512.00 MB]
      Total: 3 [4.87 GB] / in use: 2 [4.37 GB] / in no VG: 1 [512.00 MB]
    #pvdisplay
      --- Physical volume ---
      PV Name               /dev/sdb
      VG Name               lvm_test
      PV Size               512.00 MB / not usable 4.00 MB
      Allocatable           yes (but full)
      PE Size (KByte)       4096
      Total PE              127
      Free PE               0
      Allocated PE          127
      PV UUID               Pkp5Cq-SD1w-ANw2-cDDe-BGtw-nmFS-jTxXFD
       
      --- NEW Physical volume ---
      PV Name               /dev/sdc
      VG Name               
      PV Size               512.00 MB
      Allocatable           NO
      PE Size (KByte)       0
      Total PE              0
      Free PE               0
      Allocated PE          0
      PV UUID               BNCVEE-YWlK-0mrV-LOcf-0tCY-WWNw-DeySk0

    5、移除物理捲
    #pvremove /dev/sdc
    Labels on physical volume "/dev/sdc" successfully wiped

    6、 創建捲組
    創建捲組的命令為vgcreate,將使用pvcreate建立的物理捲創建為一個完整的捲組:
    # vgcreate lvm_test /dev/sdc1 /dev/sdb
    Volume group "lvm_test" successfully created
    vgcreate命令第一個參數是指定該捲組的邏輯名:lvm_test。後面參數是指定希望添加到該捲組的所有分區和磁碟。vgcreate在創建捲組 lvm_test 以外,還設置使用大小為4 MB的PE(預設為4MB),這表示捲組上創建的所有邏輯捲都以 4 MB 為增量單位來進行擴充或縮減。PE最小為1KB  ,並且必須總是1KB的 2^n 的倍數(使用-s指定,具體請參考man vgcreate)。

    7、 激活捲組
    捲組在創建時預設激活,也能使用vgchange來激活捲組:
    # vgchange -a y lvm_test

    8、 添加新的物理捲到捲組中
    當系統安裝了新的磁碟或新建分區並創建了新的物理捲,而要將其添加到已有捲組時,就需要使用vgextend命令:
    #fdisk -l /dev/sdc
    Disk /dev/sdc: 18.2 GB, 18200739840 bytes
    255 heads, 63 sectors/track, 2212 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Device Boot      Start         End      Blocks   Id  System
    /dev/sdc1               1         200     1606468+  8e  Linux LVM
    /dev/sdc2             201         400     1606500   8e  Linux LVM
             
    #pvcreate /dev/sdc2
    Physical volume "/dev/sdc2" successfully created
            
    # vgextend lvm_test /dev/sdc2
    Volume group "lvm_test" successfully extended
    這裡/dev/sdc2是新的物理捲。

    9、顯示捲組
    顯示捲組能使用vgs和vgdisplay.
    # vgs
      VG         #PV #LV #SN Attr   VSize   VFree
      VolGroup00   1   2   0 wz--n-   3.88G    0 
      lvm_test     1   1   0 wz--n- 508.00M    0 

    # vgdisplay 
      --- Volume group ---
      VG Name               lvm_test
      System ID             
      Format                lvm2
      Metadata Areas        1
      Metadata Sequence No  10
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                1
      Open LV               1
      Max PV                0
      Cur PV                1
      Act PV                1
      VG Size               508.00 MB
      PE Size               4.00 MB
      Total PE              127
      Alloc PE / Size       127 / 508.00 MB
      Free  PE / Size       0 / 0   
      VG UUID               uJx24t-WWdY-vffu-97Of-mgFB-FEov-eRwzAf

    10、掃描磁碟生成緩存文件
    #vgscan
      Reading all physical volumes.  This may take a while...
      Found volume group "lvm_test" using metadata type lvm2
      Found volume group "VolGroup00" using metadata type lvm2
       
    11、 從捲組中刪除一個物理捲
    要從一個捲組中刪除一個物理捲,首先要確認要刪除的物理捲沒有被所有邏輯捲正在使用,就要使用pvdisplay命令察看一個該物理捲信息:
    #pvdisplay /dev/sdc2
    --- Physical volume ---
    PV Name               /dev/sdc2
    VG Name               lvm_test
    PV Size               1.53 GB / not usable 868.00 KB
    Allocatable           yes 
    PE Size (KByte)       4096
    Total PE              392
    Free PE               392
    Allocated PE          0 (表示未被使用)
    PV UUID               jAiils-1vRz-Td9k-1AiD-kIJs-191z-YMz09H
      
    如果某個物理捲正在被邏輯捲所使用,就需要將該物理捲的數據備份到其他地方,然後再刪除。刪除物理捲的命令為vgreduce:
    # vgreduce lvm_test /dev/sdc2
    Removed "/dev/sdc2" from volume group "lvm_test"

    12、 創建邏輯捲
    創建邏輯捲的命令為lvcreate:
    # lvcreate -L 1500 ?n test lvm_test
    Logical volume "test" created
    該命令就在捲組lvm_test上創建名字為test,大小為1500M的邏輯捲,並且設備入口為/dev/lvm_test/test (lvm_test為捲組名,test為邏輯捲名)。如果希望創建一個使用全部捲組的邏輯捲,則需要首先察看該捲組的PE數,然後在創建邏輯捲時指定:
    # vgdisplay lvm_test| grep "Total PE"
    Total PE 4731
    # lvcreate -l 4731 lvm_test -n test
    Logical volume "test" created

    13、創建條塊化的邏輯捲
    # lvcreate -L 500M -i2  -n test lvm_test
      Using default stripesize 64.00 KB
      Rounding size (125 extents) up to stripe boundary size (126 extents)
      Logical volume "test" created
    -i2指此邏輯捲在兩個物理捲中條塊化存放數據,預設一塊大小為64KB.

    14、創建映像的邏輯捲。
    #lvcreate -L 52M  -m1  -n test lvm_test /dev/sdb1 /dev/sdc1 /dev/sdb2 
      Logical volume "test" created
    -m1表示只生成一個單一映像,映像分別放在/dev/sdb1和/dev/sdc1上,映像日誌放在/dev/sdb2上.

    15、創建快照捲。
    #lvcreate --size 10 --snapshot --name snaptest /dev/lvm_test/test 
    16、 創建文件系統
    如使用ext3文件系統:
    #mkfs.ext3 /dev/lvm_test/test
    mke2fs 1.35 (28-Feb-2004)
    max_blocks 4294967295, rsv_groups = 0, rsv_gdb = 1024
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    2424832 inodes, 4844544 blocks
    242227 blocks (5.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=8388608
    148 block groups
    32768 blocks per group, 32768 fragments per group
    16384 inodes per group
    Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000
    Writing inode tables: done                            
    inode.i_blocks = 90120, i_size = 4243456
    Creating journal (8192 blocks): done
    Writing superblocks and filesystem accounting information: done
    This filesystem will be automatically checked every 25 mounts or
    180 days, whichever comes first.  Use tune2fs -c or -i to override.
    創建了文件系統以後,就能載入並使用他:
    # mkdir /mnt/test
    # mount /dev/lvm_test/test /mnt/test
    如果希望系統啟動時自動載入文件系統,則還需要在/etc/fstab中添加內容:
    /dev/lvm_test/test /mnt/test ext3 defaults 1 2

    17、 刪除一個邏輯捲
    刪除邏輯捲以前首先需要將其卸載,然後刪除:
    # umount /dev/lvm_test/test
    # lvremove /dev/lvm_test/test
    Do you really want to remove active logical volume "test"? [y/n]: y
    Logical volume "test" successfully removed
     
    18、 擴展邏輯捲大小
    LVM提供了方便調整邏輯捲大小的能力,擴展邏輯捲大小的命令是lvextend:
    # lvextend -L12G /dev/lvm_test/test
    Extending logical volume test to 12.00 GB
    Logical volume test successfully resized
      上面的命令就實現將邏輯捲test的大小擴大為12G。
    # lvextend -L+1G /dev/lvm_test/test
    Extending logical volume test to 13.00 GB
    Logical volume test successfully resized
    上面的命令就實現將邏輯捲test的大小增加1G。
    增加了邏輯捲的容量以後,就需要修改文件系統大小以實現利用擴充的空間。
    對於希望調整被載入的文件系統大小,使用ext2online(ext2resize) 或 resize2fs.
    #df -h
    # ext2online /dev/lvm_test/test
    ext2online /dev/lvm_test/test
    ext2online v1.1.18 - 2001/03/18 for EXT2FS 0.5b

    #df -h
    Filesystem            容量  已用 可用 已用% 掛載點
    /dev/mapper/VolGroup00-LogVol01
             16G   11G  3.6G  76% /
    /dev/sda1             494M   18M  451M   4% /boot
    none                      506M     0  506M   0% /dev/shm
    /dev/mapper/lvm_test-test
             13G   63M   13G   1% /mnt/test
      
    一般建議最佳將文件系統卸載,調整大小,然後再載入:
    # umount /dev/lvm_test/test
    #resize2fs /dev/lvm_test/test
    # mount  /dev/lvm_test/test /mnt/test

    19、 減少邏輯捲大小
    使用lvreduce即可實現對邏輯捲的容量,同樣需要首先將文件系統卸載:
    # umount /mnt/test
    #e2fsck -f /dev/lvm_test/test
    # resize2fs /dev/lvm_test/test  11G
    # lvreduce -L -1.992G /dev/lvm_test/test (少2個PE的大小)
    # resize2fs /dev/lvm_test/test  (通過此命令確認是否文件系統大小和收縮後的邏輯捲大小匹配)
    # mount /dev/lvm_test/test /mnt/test

    20、顯示邏輯捲
    通過lvscan,lvs及lvdisplay能察看當前系統中存在的邏輯捲。
    # lvdisplay 
      --- Logical volume ---
      LV Name                /dev/VolGroup00/LogVol00
      VG Name                VolGroup00
      LV UUID                sPmLMD-6xq4-wStB-uSAP-jlQc-YKTm-3bt8Pc
      LV Write Access        read/write
      LV Status              available
      # open                 1
      LV Size                2.88 GB
      Current LE             92
      Segments               1
      Allocation             inherit
      Read ahead sectors     0
      Block device           253:0
      
    #lvscan 
    lvscan
      ACTIVE            ’/dev/VolGroup00/LogVol00’ [2.88 GB] inherit
      ACTIVE            ’/dev/VolGroup00/LogVol01’ [1.00 GB] inherit

    #lvs -o +devices
      LV       VG         Attr   LSize Origin Snap%  Move Log Copy%  Devices      
      LogVol00 VolGroup00 -wi-ao 2.88G                               /dev/sda2(0) 
      LogVol01 VolGroup00 -wi-ao 1.00G                               /dev/sda2(92)  

    21、使用過濾控制LVM的設備掃描
    通過編輯/etc/lvm/lvm.conf 中的filter段,來定義過濾那些設備要掃描。
    filter =[ "a|/dev/sd.*|", "a|/dev/hd.*|", "r|.*|" ] 
    上面對scsi及ide設備掃描,對其他設備均不掃描。

    22、線上數據遷移
    通過pvmove能將一個PV上的數據遷移到新的PV上,也能將PV上的某個LV遷移到另一個PV上。
    #lvs -o +devices
      LV       VG         Attr   LSize  Origin Snap%  Move Log Copy%  Devices      
      LogVol00 VolGroup00 -wi-ao  2.88G                               /dev/sda2(0) 
      LogVol01 VolGroup00 -wi-ao  1.00G                               /dev/sda2(92)
      test     lvm_test   -wi-ao 52.00M                               /dev/sdb1(0) 

    #pvmove -n test /dev/sdb1 /dev/sdc1

    #lvs -o +devices
      LV       VG         Attr   LSize  Origin Snap%  Move Log Copy%  Devices      
      LogVol00 VolGroup00 -wi-ao  2.88G                               /dev/sda2(0) 
      LogVol01 VolGroup00 -wi-ao  1.00G                               /dev/sda2(92)
      test     lvm_test   -wi-ao 52.00M                               /dev/sdc1(0) 

    23、刪除捲組
    按照順序卸載文件系統,刪除邏輯捲,然後刪除捲組。
    #umount /mnt/test
    # lvremove /dev/lvm_test/test
    Do you really want to remove active logical volume "test"? [y/n]: y
      Logical volume "test" successfully removed
    #vgremove lvm_test
      Volume group "lvm_test" successfully removed
    24、故障排查
    通過在命令後加 -v,-vv,-vvv或-vvvv來獲得更周詳的命令輸出。
    通過在lvs,vgs後加-P能更好的查看失敗設備.
    #vgs -a -o +devices -P
      Partial mode. Incomplete volume groups will be activated read-only.
      VG         #PV #LV #SN Attr   VSize    VFree   Devices                
      VolGroup00   1   2   0 wz--n-    3.88G      0  /dev/sda2(0)           
      VolGroup00   1   2   0 wz--n-    3.88G      0  /dev/sda2(92)          
      lvm_test     2   2   0 wz--n- 1016.00M 896.00M pvmove0(0)             
      lvm_test     2   2   0 wz--n- 1016.00M 896.00M /dev/sdb(0),/dev/sdc(0)
    #lvs -a -o +devices -P
      Partial mode. Incomplete volume groups will be activated read-only.
      Failure parsing mirror status fraction: 1 core
      Failure parsing mirror status fraction: 1 core
      LV        VG         Attr   LSize  Origin Snap%  Move     Log Copy%  Devices                
      LogVol00  VolGroup00 -wi-ao  2.88G                                   /dev/sda2(0)           
      LogVol01  VolGroup00 -wi-ao  1.00G                                   /dev/sda2(92)          
      [pvmove0] lvm_test   p-C-ao 60.00M               /dev/sdb            /dev/sdb(0),/dev/sdc(0)
      test      lvm_test   -wI-a- 60.00M                                   pvmove0(0)             

    五、 總結
    根據上面的討論能看到,LVM具有非常好的可伸縮性,使用起來非常方便。能方便地對捲組、邏輯捲的大小進行調整,更進一步調整文件系統的大小,還能方便的進行數據遷移,數據完整性保護。如果希望瞭解更多信息,請參考LVM-HOWTO。


    此文件使用內核為2.6.22.1,在做pvmove時出現錯誤,如上.補丁如下:
    Index: linux-2.6.21/drivers/md/dm-raid1.c
    ===================================================================
    --- linux-2.6.21.orig/drivers/md/dm-raid1.c        2007-05-13 18:56:09.000000000 +0100
    +++ linux-2.6.21/drivers/md/dm-raid1.c        2007-05-13 19:09:54.000000000 +0100
    @@ -1288,12 +1288,12 @@ static int mirror_status(struct dm_targe
                    for (m = 0; m nr_mirrors; m++)
                            DMEMIT("%s ", ms->mirror[m].dev->name);

    -                DMEMIT("%llu/%llu",
    +                DMEMIT("%llu/%llu ",
                            (unsigned long long)ms->rh.log->type->
                                    get_sync_count(ms->rh.log),
                            (unsigned long long)ms->nr_regions);

    -                sz = ms->rh.log->type->status(ms->rh.log, type, result, maxlen);
    +                sz += ms->rh.log->type->status(ms->rh.log, type, result+sz, maxlen-sz);

                    break;

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這裡主要介紹ANSI C的特性:當執行算術運算時,操作數的類型如果不同,就會發生轉換。數據類型一般朝著精度更高、長度更長的方向轉換,整型數如果轉換為signed不會丟失信息,就轉換為signed,否則轉換為unsigned。 一、算術轉換(K&R C) 首先: 任何類型為char或short的操作數 ...
  • using System; namespace ConsoleApp1 { interface IInterface1 { void ft(); } interface IInterface2 { void ft(); } class MyClass : IInterface1, IInterfa.... ...
  • 本周終於發佈了.NET Core 2.2,ASP.NET Core 2.2以及Entity Framework Core 2.2,雖然更大的新聞可能是.NET Core 3.0的特性公佈,但不妨先將現有的.NET Core版本升級到2.2,及時體驗一下新的功能。 .NET Core 2.2 分層編譯 ...
  • 1、錯誤案例: Index:1 Uncaught ReferenceError: 系統管理 is not defined at HTMLAnchorElement.onclick (Index:1) 2、錯誤寫法 3、正確寫法(加入轉義符號 ' \ ' ) ...
  • 在 Asp.Net Core 1.0 時代,由於設計上的問題, HttpClient 給開發者帶來了無盡的困擾,用 Asp.Net Core 開發團隊的話來說就是:我們註意到,HttpClient 被很多開發人員不正確的使用。得益於 .Net Core 不斷的版本快速升級;解決方案也一一浮出水面,本... ...
  • 一、緩存機制介紹 在Linux系統中,為了提高文件系統性能,內核利用一部分物理記憶體分配出緩衝區,用於緩存系統操作和數據文件,當內核收到讀寫的請求時,內核先去緩存區找是否有請求的數據,有就直接返回,如果沒有則通過驅動程式直接操作磁碟。緩存機制優點:減少系統調用次數,降低CPU上下文切換和磁碟訪問頻率。 ...
  • 一、實驗環境 1、VMware12、倆台Linux(Ser 和 Client )、DHCP安裝包。 二、操作流程 1、安裝DHCP 2、配置DHCP的配置文件: /etc/dhcp/dhcpd.conf 3、測試服務 三、實操如下 1、# yum -y install dhcp* //安裝DHCP, ...
  • 最近需要跑比較大的模型,電腦上的 cpu 版本太慢了,跑了兩天實驗室,大冬天的,還是待在宿舍學習比較舒服,於是狠下心來重新裝了系統,探索一下 gpu 版本的安裝。比較令人可喜的是,跟著前輩們的經驗,還是讓我給安裝成功了。由於我是新裝的系統,就像嬰兒般純凈,所以進入系統的第一步就是安裝 cuda,只要 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...