配置分區(qū)大小
根據(jù)前面介紹的分區(qū)命令就可以創(chuàng)建分區(qū)了,不過需要注意,我們要為某些特定掛載點設置合適的分區(qū)大小。CentOS 7 (參考 Red Hat Ent erprise Linux 7 安裝手冊)至少需要為 /boot 、/、/home 、swap 這四個掛載點配置分區(qū)。下面是這四個掛載點分區(qū)大小建議:
-
/boot:建議大小至少有 500 MB。掛載到/boot的分區(qū)含有操作系統(tǒng)內(nèi)核,它可讓系統(tǒng)引導 CentOS,并提供引導過程中要使用的文件。/boot在日常系統(tǒng)運行中并不需要,只在啟動和內(nèi)核升級的時候用到。多數(shù)情況下, 500 MB 的/boot分區(qū)就足夠了。 -
/:建議大小至少為 10 GB。/ 分區(qū)(或叫根分區(qū))是最重要而且必需的,需要最先掛載。/ 目錄(或叫根目錄)是目錄樹的頂層,所有文件和目錄都在 / 目錄中顯示,即使它們實際上存儲在其他的物理設備上(不要將/ 目錄與/root 目錄混淆。/root 目錄是root 用戶的主目錄)。根文件系統(tǒng)中的內(nèi)容應該足以啟動、恢復、修復系統(tǒng)。因此/目錄下的特定目錄是不能作為獨立分區(qū)的。默認情況下所有文件都寫入這個分區(qū),除非要寫入的路徑掛載到了不同分區(qū),比如/home分區(qū)。雖然 5 GB root 分區(qū)滿足最低安裝條件,但還是建議至少分配 10 GB 分區(qū)以便可以盡可能安裝想要的軟件包。 -
/home:其分區(qū)大小取決于本地保存數(shù)據(jù)量、用戶數(shù)量等等。/home 目錄包含用戶定義的配置文件、緩存、應用程序數(shù)據(jù)和媒體文件。該分區(qū)的存在可以讓你在不刪除用戶數(shù)據(jù)文件的情況下進行升級或者重裝 CentOS。如果存儲空間超過 50 GB,則會在創(chuàng)建其他分區(qū)的同時自動創(chuàng)建 /home 分區(qū)??紤]為所有可能包含敏感數(shù)據(jù)的分區(qū)加密??紤]為所有可能包含敏感數(shù)據(jù)的分區(qū)加密。加密可防止對這些分區(qū)中數(shù)據(jù)的未授權訪問,即使他們可以訪問物理存儲設備。在大多數(shù)情況下,應該至少對 /home 分區(qū)加密。 -
swap:swap 分區(qū)支持虛擬內(nèi)存。當沒有足夠的 RAM 保存系統(tǒng)處理的數(shù)據(jù)時會將數(shù)據(jù)寫入 swap 分區(qū)。當系統(tǒng)缺乏 swap 空間時,內(nèi)核會因 RAM 內(nèi)存耗盡而終止進程。配置過多 swap 空間會造成存儲設備處于分配狀態(tài)而閑置,這是浪費資源。過多 swap 空間還會掩蓋內(nèi)存泄露。內(nèi)存小于 4G 時設置該分區(qū)大小為內(nèi)存的 2 倍 ,內(nèi)存大于 4G 時設置該分區(qū)的大小和內(nèi)存大小一致即可 。下表根據(jù)系統(tǒng)中的 RAM 容量以及是否需要足夠的內(nèi)存以便系統(tǒng)休眠來提供推薦的 swap 分區(qū)大小。
| 系統(tǒng) RAM 容量 | 建議 swap 空間大小 | 允許休眠的建議 swap 空間大小 |
|---|---|---|
| 低于 2 GB | RAM 容量的兩倍 | RAM 容量的三倍 |
| 2 GB - 8 GB | 與 RAM 容量相等 | RAM 容量的兩倍 |
| 8 GB - 64 GB | 4 GB 到 RAM 容量的 0.5 倍 | RAM 容量的 1.5 倍 |
| 超過 64 GB | 獨立負載(至少 4GB) | 不建議使用休眠功能 |
下面是可選的掛載點分區(qū):
/var:/var 分配 8-12 GB 對于桌面系統(tǒng)來說是比較合適的取值,具體取值取決于安裝的軟件數(shù)量。/var 目錄中包含大量的應用程序變量數(shù)據(jù),例如 spool 目錄和文件,管理和登錄數(shù)據(jù),pacman 的緩存,ABS 樹,Apache 網(wǎng)頁服務器,臨時下載的更新軟件包(PackageKit 更新軟件默認將更新的軟件包下載到 /var/cache/yum/)等等。它通常被用作緩存或者日志記錄,因此讀寫頻繁。將它獨立出來可以避免由于大量日志寫入造成的磁盤空間耗盡等問題。確定掛載在 /var 的分區(qū)中有足夠空間可用于保存下載的更新以及其他內(nèi)容。如果要為 /var 生成獨立分 區(qū),請確定 /var/cache/yum/ 大小至少在 3.0 GB 以上以便保存下載的軟件包更新。-
/usr:/user 目錄中包含 CentOS 系統(tǒng)中大部分軟件內(nèi)容。要安裝默認軟件組需要分配至少 5 GB 空間。如果將該系統(tǒng)作為軟件開發(fā)工作站使用,則至少需要分配 10GB。如果 /usr 或 /var 是在剩余 root 卷之外進行分區(qū),引導過程會變得非常復雜,因為這些目錄包含對引導極為重要的組件。在某些情況下,比如這些目錄位于 iSCSI 驅動器或 FCoE 位置, 系統(tǒng)可能無法引導,或 者在關機或重啟時掛起,并給出 Device is busy 出錯信息。這些限制僅適用于 /usr 或 /var,不會對以下目錄產(chǎn)生影響。例如:/var/www 的獨立分區(qū)可正常工作,沒有任何問題。考慮在 LVM 卷組中保留部分未分配空間。如果空間需要更改,但不希望刪除其他分區(qū)中的數(shù)據(jù)來重新分配存儲,這個未分配空間就提供了一些機動性。還可以為該分區(qū)選擇精簡配置設備類型,以便該卷可以自動處理未使用的空間。如果將子目錄分成分區(qū),就可以在決定使用當前安裝 CentOS 新版時保留那些子目錄中的內(nèi)容。例如:如果要在 /var/lib/mysql 中運行 MySQL 數(shù)據(jù)庫,請將那個目錄放在單獨的分區(qū)中,以備之后需要重新安裝。
/boot/efi:如果使用 UEFI 引導方式,則還需要 /boot/efi 分區(qū),該分區(qū)應至少應有 50 MB,建議使用 200 MB。我們可以根據(jù)需要(比如安裝 Weblogic 和 Oracle 時)創(chuàng)建額外的分區(qū)。在使用 GPT(GUID 分區(qū)表)的引導裝載程序的 BIOS 系統(tǒng)中,需要生成大小為 1 MB 的 biosboot 分區(qū)。/data:可以為需要多用戶共享的文件建立一個 data (其他名稱也可以)分區(qū),比如 Oracle 的數(shù)據(jù)庫實例可以放在該目錄下。
為各掛載目錄創(chuàng)建好分區(qū)之后,就可以為其創(chuàng)建文件系統(tǒng)了。
創(chuàng)建文件系統(tǒng)
在 Windows 環(huán)境下,格式化的操作相對簡單。通常的操作步驟是:先打開資源管理器,接著在希望被執(zhí)行格式化的盤符圖標上右擊,然后選擇“格式化”,再按照提示操作即可。也可以選擇“快速格式化”,但要求分區(qū)沒有壞道。需要注意的是:對硬盤執(zhí)行格式化操作時,用戶需要擁有系統(tǒng)管理員權限(僅限于 Windows Vista 以及此后推出的作業(yè)系統(tǒng))。在 Windows 環(huán)境中,除了可以使用圖形化的操作界面執(zhí)行格式化操作之外,也可以在命令提示字符中使用 Diskpart 指令(僅限于 Windows 2000 及以后的作業(yè)系統(tǒng),包含 Windows PE)進行操作。
在 Unix/Linux 環(huán)境下,通常使用命令工具執(zhí)行格式化操作。需要注意的是:對硬盤執(zhí)行格式化操作時,用戶需要擁有超級用戶權限。創(chuàng)建文件系統(tǒng)的常用命令如下:
- mkfs:創(chuàng)建一個 ext 文件系統(tǒng);
- mke2fs:創(chuàng)建一個 ext2 文件系統(tǒng);
- mkfs.ext2:創(chuàng)建一個 ext2 文件系統(tǒng);
- mkfs.ext3:創(chuàng)建一個 ext3 文件系統(tǒng);
- mkfs.ext4:創(chuàng)建一個 ext4 文件系統(tǒng);
- mkfs.xfs:創(chuàng)建一個 XFS 文件系統(tǒng);
- xfs_mkfile:創(chuàng)建一個 XFS t文件系統(tǒng);
- mkfs.cramfs:創(chuàng)建一個 cramfs 文件系統(tǒng);
- mkfs.btrfs:創(chuàng)建一個 Btrfs 文件系統(tǒng);
- mkswap:創(chuàng)建一個 swap 文件系統(tǒng);
- jfs_mkfs:創(chuàng)建一個 JFS 文件系統(tǒng)。
并非所有文件系統(tǒng)的命令工具都已經(jīng)默認安裝了。要想知道某個文件系統(tǒng)的命令工具是否可用,可以使用 type 命令。
[root@localhost ~]# type mkfs
mkfs is /usr/sbin/mkfs
[root@localhost ~]# type mke2fs
mke2fs is /usr/sbin/mke2fs
[root@localhost ~]# type mkfs.ext2
mkfs.ext2 is /usr/sbin/mkfs.ext2
[root@localhost ~]# type mkfs.ext3
mkfs.ext3 is /usr/sbin/mkfs.ext3
[root@localhost ~]# type mkfs.ext4
mkfs.ext4 is /usr/sbin/mkfs.ext4
[root@localhost ~]# type mkfs.xfs
mkfs.xfs is /usr/sbin/mkfs.xfs
[root@localhost ~]# type mkfs.cramfs
mkfs.cramfs is /usr/sbin/mkfs.cramfs
[root@localhost ~]# type mkfs.btrfs
mkfs.btrfs is /usr/sbin/mkfs.btrfs
[root@localhost ~]# type xfs_mkfile
xfs_mkfile is /usr/sbin/xfs_mkfile
[root@localhost ~]# type mkswap
mkswap is /usr/sbin/mkswap
[root@localhost ~]# type jfs_mkfs
-bash: type: jfs_mkfs: not found
每個文件系統(tǒng)命令都有很多命令行選項,允許你定制如何在分區(qū)上創(chuàng)建文件系統(tǒng)。要查看所有可用的命令行選項,可用 man 命令來顯示該文件系統(tǒng)命令的手冊頁面。所有的文件系統(tǒng)命令都允許通過不帶選項的簡單命令來創(chuàng)建一個默認的文件系統(tǒng)。
[root@localhost ~]# parted
GNU Parted 3.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) select /dev/sdb
Using /dev/sdb
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 2149MB 2147MB primary ext4
2 2149MB 4296MB 2147MB primary
3 4296MB 5370MB 1074MB primary
(parted) q
[root@localhost ~]# mkfs.ext3 /dev/sdb2
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
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
[root@localhost ~]# parted
GNU Parted 3.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) select /dev/sdb
sdb sdb1 sdb2 sdb3
(parted) select /dev/sdb
Using /dev/sdb
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 2149MB 2147MB primary ext4
2 2149MB 4296MB 2147MB primary ext3
3 4296MB 5370MB 1074MB primary
(parted) q
[root@localhost ~]#
為分區(qū)創(chuàng)建了文件系統(tǒng)之后,下一步是將它掛載到虛擬目錄下的某個掛載點,這樣就可以將數(shù)據(jù)存儲在新文件系統(tǒng)中了。你可以將新文件系統(tǒng)通過 mount 命令掛載到虛擬目錄中需要額外空間的任何位置。
[root@localhost ~]# mkdir /data
[root@localhost ~]# cd /
[root@localhost /]# ll
total 70
lrwxrwxrwx. 1 root root 7 May 4 06:32 bin -> usr/bin
dr-xr-xr-x. 5 root root 1024 May 8 21:44 boot
drwxr-xr-x. 2 root root 4096 May 13 20:47 data
drwxr-xr-x. 20 root root 3400 May 13 20:43 dev
drwxr-xr-x. 139 root root 12288 May 13 20:25 etc
drwxr-xr-x. 4 root root 4096 May 4 06:46 home
lrwxrwxrwx. 1 root root 7 May 4 06:32 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 May 4 06:32 lib64 -> usr/lib64
drwx------. 2 root root 16384 May 4 06:32 lost+found
drwxr-xr-x. 2 root root 4096 Nov 5 2016 media
drwxr-xr-x. 3 root root 4096 May 8 21:41 mnt
drwxr-xr-x. 3 root root 4096 May 4 06:42 opt
dr-xr-xr-x. 182 root root 0 May 8 07:35 proc
dr-xr-x---. 5 root root 4096 May 13 20:19 root
drwxr-xr-x. 41 root root 1200 May 13 11:23 run
lrwxrwxrwx. 1 root root 8 May 4 06:32 sbin -> usr/sbin
drwxr-xr-x. 2 root root 4096 Nov 5 2016 srv
dr-xr-xr-x. 13 root root 0 May 8 07:35 sys
drwxrwxrwt. 20 root root 4096 May 13 20:42 tmp
drwxr-xr-x. 13 root root 4096 May 4 06:32 usr
drwxr-xr-x. 22 root root 4096 May 8 07:35 var
[root@localhost /]# mount -t ext4 /dev/sdb1 /data
[root@localhost /]# ls -al /data
total 24
drwxr-xr-x. 3 root root 4096 May 13 20:39 .
dr-xr-xr-x. 19 root root 4096 May 13 20:47 ..
drwx------. 2 root root 16384 May 13 20:39 lost+found
[root@localhost /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 9.8G 4.6G 4.7G 50% /
devtmpfs 474M 0 474M 0% /dev
tmpfs 489M 156K 489M 1% /dev/shm
tmpfs 489M 14M 476M 3% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 477M 142M 307M 32% /boot
/dev/mapper/cl-home 5.8G 276M 5.2G 5% /home
tmpfs 98M 24K 98M 1% /run/user/1000
tmpfs 98M 0 98M 0% /run/user/0
/dev/sdb1 2.0G 6.0M 1.8G 1% /data
[root@localhost /]#
現(xiàn)在你可以在新分區(qū)中保存新文件和目錄了! 這種掛載文件系統(tǒng)的方法只能臨時掛載文件系統(tǒng)。當重啟 Linux 系統(tǒng)時,文件系統(tǒng)并不會自動掛載。要強制 Linux 在啟動時自動掛載新的文件系統(tǒng),可以將其添加到 /etc/fstab 文件。
邏輯卷管理(LVM)
如果用標準分區(qū)在硬盤上創(chuàng)建了文件系統(tǒng),為已有文件系統(tǒng)添加額外的空間多少是一種痛苦的體驗。你只能在同一個物理硬盤的可用空間范圍內(nèi)調整分區(qū)大小。如果硬盤上沒有地方了,你就必須弄一個更大的硬盤,然后手動將已有的文件系統(tǒng)移動到新的硬盤上。這時候就可以通過將另外一個硬盤上的分區(qū)加入已有文件系統(tǒng),動態(tài)地添加存儲空間。 Linux 邏輯卷管理器(logical volume manager, LVM)軟件包正好可以用來做這個。它可以讓你在無需重建整個文件系統(tǒng)的情況下,輕松地管理磁盤空間。
邏輯卷管理布局
邏輯卷管理的核心在于如何處理安裝在系統(tǒng)上的硬盤分區(qū)。在邏輯卷管理的世界里,硬盤稱作物理卷(physical volume, PV)。每個物理卷都會映射到硬盤上特定的物理分區(qū)。多個物理卷集中在一起可以形成一個卷組(volume group, VG)。邏輯卷管理系統(tǒng)將卷組視為一個物理硬盤,但事實上卷組可能是由分布在多個物理硬盤上的多個物理分區(qū)組成的。卷組提供了一個創(chuàng)建邏輯分區(qū)的平臺,而這些邏輯分區(qū)則包含了文件系統(tǒng)。 整個結構中的最后一層是邏輯卷(logical volume, LV)。邏輯卷為 Linux 提供了創(chuàng)建文件系統(tǒng)的分區(qū)環(huán)境,作用類似于到目前為止我們一直在探討的 Linux 中的物理硬盤分區(qū)。Linux 系統(tǒng)將邏輯卷視為物理分區(qū)。 每個邏輯卷可以被格式化成某種文件系統(tǒng),然后掛載到虛擬目錄中某個特定位置。邏輯卷由 PE (physical extents,即物理區(qū)段)組成,PE 為硬盤可供指派給邏輯卷的最小單位(通常為4MB)。

注意,上圖中的第三個物理硬盤有一個未使用的分區(qū)。通過邏輯卷管理,你隨后可以輕松地將這個未使用分區(qū)分配到已有卷組:要么用它創(chuàng)建一個新的邏輯卷,要么在需要更多空間時用它來擴展已有的邏輯卷。 類似地,如果你給系統(tǒng)添加了一塊硬盤,邏輯卷管理系統(tǒng)允許你將它添加到已有卷組,為某個已有的卷組創(chuàng)建更多空間,或是創(chuàng)建一個可用來掛載的新邏輯卷。這種擴展文件系統(tǒng)的方法要好用得多!

優(yōu)點
比起正常的硬盤分區(qū)管理,LVM 更富于彈性:
- 使用卷組(VG),使眾多硬盤空間看起來像一個大硬盤。
- 使用邏輯卷(LV),可以創(chuàng)建跨越眾多硬盤空間的分區(qū)。
- 可以創(chuàng)建小的邏輯卷(LV),在空間不足時再動態(tài)調整它的大小。
- 在調整邏輯卷(LV)大小時可以不用考慮邏輯卷在硬盤上的位置,不用擔心沒有可用的連續(xù)空間。
- 可以在線(online)對邏輯卷(LV)和卷組(VG)進行創(chuàng)建、刪除、調整大小等操作。LVM 上的文件系統(tǒng)也需要重新調整大小,某些文件系統(tǒng)也支持這樣的在線操作。
- 無需重新啟動服務,就可以將服務中用到的邏輯卷(LV)在線(online)/動態(tài)(live)遷移至別的硬盤上。
- 允許創(chuàng)建快照,可以保存文件系統(tǒng)的備份,同時使服務的下線時間(downtime)降低到最小。
這些優(yōu)點使得 LVM 對服務器的管理非常有用,對于桌面系統(tǒng)管理的幫助則沒有那么顯著,你需要根據(jù)實際情況進行取舍。
缺點
- 在系統(tǒng)設置時需要更復雜的額外步驟。
Linux LVM
Linux LVM 是由 Heinz Mauelshagen 開發(fā)的,于 1998年 發(fā)布到了 Linux 社區(qū)。它允許你在 Linux 上用簡單的命令行命令管理一個完整的邏輯卷管理環(huán)境。 Linux LVM 有兩個可用的版本。
- LVM1:最初的 LVM 包于 1998 年發(fā)布,只能用于 Linux 內(nèi)核 2.4 版本。它僅提供了基本的邏 輯卷管理功能。
- LVM2: LVM 的更新版本,可用于 Linux 內(nèi)核 2.6 版本。它在標準的 LVM1 功能外提供了額外的功能。
大部分采用 2.6 或更高內(nèi)核版本的現(xiàn)代 Linux 發(fā)行版都提供對 LVM2 的支持。除了標準的邏輯卷管理功能外, LVM2 還提供了另外一些好用的功能。
-
快照。
最初的 Linux LVM 允許你在邏輯卷在線的狀態(tài)下將其復制到另一個設備。這個功能叫作快照(snapshot )。在備份由于高可靠性需求而無法鎖定的重要數(shù)據(jù)時,快照功能非常給力。傳統(tǒng)的備份方法在將文件復制到備份媒體上時通常要將文件鎖定??煺赵试S你在復制的同時,保證運行關鍵任務的 Web 服務器或數(shù)據(jù)庫服務器繼續(xù)工作。遺憾的是, LVM1 只允許你創(chuàng)建只讀快照。一旦創(chuàng)建了快照,就不能再寫入東西了。 LVM2 允許你創(chuàng)建在線邏輯卷的可讀寫快照。有了可讀寫的快照,就可以刪除原先的邏輯卷, 然后將快照作為替代掛載上。這個功能對快速故障轉移或涉及修改數(shù)據(jù)的程序試驗(如果失敗, 需要恢復修改過的數(shù)據(jù))非常有用。
-
條帶化。
LVM2 提供的另一個引人注目的功能是條帶化(striping)。有了條帶化,可跨多個物理硬盤創(chuàng)建邏輯卷。當 Linux LVM 將文件寫入邏輯卷時,文件中的數(shù)據(jù)塊會被分散到多個硬盤上。每個后繼數(shù)據(jù)塊會被寫到下一個硬盤上。條帶化有助于提高硬盤的性能,因為 Linux 可以將一個文件的多個數(shù)據(jù)塊同時寫入多個硬盤, 而無需等待單個硬盤移動讀寫磁頭到多個不同位置。這個改進同樣適用于讀取順序訪問的文件, 因為 LVM 可同時從多個硬盤讀取數(shù)據(jù)。LVM 條帶化不同于 RAID 條帶化。 LVM 條帶化不提供用來創(chuàng)建容錯環(huán)境的校驗信息。事實上,LVM 條帶化會增加文件因硬盤故障而丟失的概率。單個硬盤故障可能會造成多個邏輯卷無法訪問。
-
鏡像。
通過 LVM 安裝文件系統(tǒng)并不意味著文件系統(tǒng)就不會再出問題。和物理分區(qū)一樣, LVM 邏輯卷也容易受到斷電和磁盤故障的影響。一旦文件系統(tǒng)損壞,就有可能再也無法恢復。 LVM 快照功能提供了一些安慰,你可以隨時創(chuàng)建邏輯卷的備份副本,但對有些環(huán)境來說可能還不夠。對于涉及大量數(shù)據(jù)變動的系統(tǒng),比如數(shù)據(jù)庫服務器,自上次快照之后可能要存儲成百上千條記錄。 這個問題的一個解決辦法就是 LVM 鏡像。鏡像是一個實時更新的邏輯卷的完整副本。當你創(chuàng)建鏡像邏輯卷時, LVM 會將原始邏輯卷同步到鏡像副本中。根據(jù)原始邏輯卷的大小,這可能需要一些時間才能完成。 一旦原始同步完成, LVM 會為文件系統(tǒng)的每次寫操作執(zhí)行兩次寫入——一次寫入到主邏輯卷,一次寫入到鏡像副本。可以想到,這個過程會降低系統(tǒng)的寫入性能。就算原始邏輯卷因為某些原因損壞了,你手頭也已經(jīng)有了一個完整的最新副本!
使用 Linux LVM
Linux LVM 包只提供了命令行程序來創(chuàng)建和管理邏輯卷管理系統(tǒng)中所有組件。有些 Linux 發(fā)行版則包含了命令行命令對應的圖形化前端,但為了完全控制你的 LVM 環(huán)境,最好習慣直接使用這些命令。
-
定義物理卷
創(chuàng)建過程的第一步就是將硬盤上的物理分區(qū)轉換成 Linux LVM 使用的物理卷區(qū)段。
fdisk命令可以幫忙。在創(chuàng)建了基本的 Linux 分區(qū)之后,你需要通過t命令改變分區(qū)類型。# 查看新添加新硬盤后新建分區(qū)的系統(tǒng) id,發(fā)現(xiàn)為默認的 Linxu [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: 0x000391ab Device Boot Start End Blocks Id System /dev/sdb1 2048 4196351 2097152 83 Linux /dev/sdb2 4196352 8390655 2097152 83 Linux /dev/sdb3 8390656 10487807 1048576 83 Linux Disk /dev/sdb1: 2147 MB, 2147483648 bytes, 4194304 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 /dev/sdb2: 2147 MB, 2147483648 bytes, 4194304 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 /dev/sdb3: 1073 MB, 1073741824 bytes, 2097152 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 # 修改新建分區(qū)的系統(tǒng) id [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): p 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: 0x000391ab Device Boot Start End Blocks Id System /dev/sdb1 2048 4196351 2097152 83 Linux /dev/sdb2 4196352 8390655 2097152 83 Linux /dev/sdb3 8390656 10487807 1048576 83 Linux Command (m for help): l 0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris 1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT- 2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT- 3 XENIX usr 3c PartitionMagic 84 OS/2 hidden C: c6 DRDOS/sec (FAT- 4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx 5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data 6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / . 7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility 8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt 9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi eb BeOS fs e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/ 10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC b 11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor 12 Compaq diagnost 5c Priam Edisk a9 NetBSD f4 SpeedStor 14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f2 DOS secondary 16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS 17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE 18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto 1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep 1c Hidden W95 FAT3 75 PC/IX be Solaris boot ff BBT 1e Hidden W95 FAT1 80 Old Minix Command (m for help): t Partition number (1-3, default 3): 1 Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM' Command (m for help): t Partition number (1-3, default 3): 2 Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM' Command (m for help): t Partition number (1-3, default 3): 3 Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM' Command (m for help): p 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: 0x000391ab Device Boot Start End Blocks Id System /dev/sdb1 2048 4196351 2097152 8e Linux LVM /dev/sdb2 4196352 8390655 2097152 8e Linux LVM /dev/sdb3 8390656 10487807 1048576 8e Linux LVM 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. # 再次查看新建分區(qū)的系統(tǒng) id,發(fā)現(xiàn)已經(jīng)變成了 Linux LVM [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: 0x000391ab Device Boot Start End Blocks Id System /dev/sdb1 2048 4196351 2097152 8e Linux LVM /dev/sdb2 4196352 8390655 2097152 8e Linux LVM /dev/sdb3 8390656 10487807 1048576 8e Linux LVM Disk /dev/sdb1: 2147 MB, 2147483648 bytes, 4194304 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 /dev/sdb2: 2147 MB, 2147483648 bytes, 4194304 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 /dev/sdb3: 1073 MB, 1073741824 bytes, 2097152 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 [root@localhost ~]#分區(qū)類型 8e 表示這個分區(qū)將會被用作 Linux LVM 系統(tǒng)的一部分,而不是一個直接的文件系統(tǒng)。
下一步是用物理分區(qū)來創(chuàng)建物理卷。這可以通過
pvcreate命令來完成。pvcreate DEVICE定義了用于物理卷的物理分區(qū)DEVICE。它只是簡單地將物理分區(qū)標記成 Linux LVM 系統(tǒng)中的分區(qū)而已。如果pvcreate命令不能正常工作,很可能是因為 LVM2 軟件包沒有默認安裝,可參考軟件包的安裝部分的介紹來安裝 LVM2。# 如果物理分區(qū)已存在簽名標簽,創(chuàng)建物理卷時需要擦除該簽名 [root@localhost ~]# pvcreate /dev/sdb1 WARNING: ext4 signature detected on /dev/sdb1 at offset 1080. Wipe it? [y/n]: y Wiping ext4 signature on /dev/sdb1. Physical volume "/dev/sdb1" successfully created. # 如果物理分區(qū)已被掛載,那么在創(chuàng)建物理卷之前需要先將其卸載 [root@localhost ~]# pvcreate /dev/sdb2 Can't open /dev/sdb2 exclusively. Mounted filesystem? [root@localhost ~]# umount /dev/sdb2 [root@localhost ~]# pvcreate /dev/sdb2 WARNING: ext3 signature detected on /dev/sdb2 at offset 1080. Wipe it? [y/n]: y Wiping ext3 signature on /dev/sdb2. Physical volume "/dev/sdb2" successfully created. [root@localhost ~]# pvcreate /dev/sdb3 dev_is_mpath: failed to get device for 8:17 Physical volume "/dev/sdb3" successfully created. [root@localhost ~]#別被嚇人的消息 dev_is_mpath: failed to get device for 8:17 或類似的消息唬住了。只要看到了 successfully created 就沒問題。 pvcreate 命令會檢查分區(qū)是否為多路(multi-path, mpath)設備。如果不是的話,就會發(fā)出上面那段消息。
如果你想查看創(chuàng)建進度的話,可以使用
pvdisplay命令來顯示已創(chuàng)建的物理卷列表。[root@localhost ~]# pvdisplay /dev/sdb* "/dev/sdb2" is a new physical volume of "2.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb2 VG Name PV Size 2.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID xKDxtk-6Bgp-CmEL-Lp14-X18Q-67l7-xr1jvn "/dev/sdb1" is a new physical volume of "2.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size 2.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID dS6C30-O5rh-k3bx-eG1O-8WkX-9KxU-ruerYU "/dev/sdb3" is a new physical volume of "1.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb3 VG Name PV Size 1.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID LXuFvo-7eDX-RdAm-9c1x-f4eZ-0N3g-UTdEAf Failed to find physical volume "/dev/sdb". [root@localhost ~]#pvdisplay命令顯示出/dev/sdb1、/dev/sdb2、/dev/sdb3現(xiàn)在已經(jīng)被標記為物理卷。注意,輸出中的 VG Name 內(nèi)容為空,因為物理卷還不屬于某個卷組。由于我們并沒有為/dev/sdb上的剩余空間創(chuàng)建分區(qū)和物理卷,所以命令最后輸出Failed to find physical volume "/dev/sdb"。 -
創(chuàng)建卷組
下一步是從物理卷中創(chuàng)建一個或多個卷組(VG)。究竟要為系統(tǒng)創(chuàng)建多少卷組并沒有既定的規(guī)則,你可以將所有的可用物理卷加到一個卷組,也可以結合不同的物理卷創(chuàng)建多個卷組。要從命令行創(chuàng)建卷組,需要使用
vgcreate命令。vgcreate <volume_group> <physical_volume_list>命令需要指定要創(chuàng)建的卷組名以及用來創(chuàng)建卷組的若干物理卷名。[root@localhost ~]# vgcreate VG01 /dev/sdb1 Volume group "VG01" successfully created [root@localhost ~]#輸出結果平淡無奇。如果你想看看新創(chuàng)建的卷組的細節(jié),可用
vgdisplay命令。[root@localhost ~]# vgdisplay VG01 --- Volume group --- VG Name VG01 System ID Format lvm2 Metadata Areas 1 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 1 Act PV 1 VG Size 2.00 GiB PE Size 4.00 MiB Total PE 511 Alloc PE / Size 0 / 0 Free PE / Size 511 / 2.00 GiB VG UUID WaAcyp-fQfL-YzUJ-N27b-RZFW-41aY-R1pxaH [root@localhost ~]#這個例子使用
/dev/sdb1分區(qū)上創(chuàng)建的物理卷,創(chuàng)建了一個名為VG01的卷組。Cur PV(當前物理卷數(shù))、Act PV(實際物理卷數(shù))表示當前卷組由幾個物理卷組成。使用
vgextend <volume_group> <another_physical_volume>命令可以為已存在的卷組添加新的物理卷。[root@localhost ~]# vgextend VG01 /dev/sdb2 /dev/sdb3 Volume group "VG01" successfully extended [root@localhost ~]# vgdisplay VG01 --- Volume group --- VG Name VG01 System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 2 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 4.99 GiB PE Size 4.00 MiB Total PE 1277 Alloc PE / Size 0 / 0 Free PE / Size 1277 / 4.99 GiB VG UUID 6aYut8-yFel-eniy-CWiO-dMi8-cRH5-uWKWrW [root@localhost ~]#使用
vgreduce <volume_group> <add_physical_volume>命令可以為已存在的卷組去除某些物理卷。僅有一個物理卷的卷組不允許再去除僅剩的物理卷。[root@localhost ~]# vgreduce VG01 /dev/sdb2 /dev/sdb3 Removed "/dev/sdb2" from volume group "VG01" Removed "/dev/sdb3" from volume group "VG01" [root@localhost ~]# vgreduce VG01 /dev/sdb1 Can't remove final physical volume "/dev/sdb1" from volume group "VG01" [root@localhost ~]# vgdisplay VG01 --- Volume group --- VG Name VG01 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 7 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 2.00 GiB PE Size 4.00 MiB Total PE 511 Alloc PE / Size 0 / 0 Free PE / Size 511 / 2.00 GiB VG UUID 6aYut8-yFel-eniy-CWiO-dMi8-cRH5-uWKWrW [root@localhost ~]#使用
vgremove <volume_group>命令可以刪除已存在的整個卷組。[root@localhost ~]# vgremove VG01 Volume group "VG01" successfully removed [root@localhost ~]# vgdisplay VG01 Volume group "VG01" not found Cannot process volume group VG01 [root@localhost ~]#在創(chuàng)建卷組時可以一次性指定多個物理卷。
[root@localhost ~]# vgcreate VG01 /dev/sdb1 /dev/sdb2 /dev/sdb3 Volume group "VG01" successfully created [root@localhost ~]# vgdisplay VG01 --- Volume group --- VG Name VG01 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 4.99 GiB PE Size 4.00 MiB Total PE 1277 Alloc PE / Size 0 / 0 Free PE / Size 1277 / 4.99 GiB VG UUID 4pOIcr-z8iP-IK3S-funj-8NI9-49Pd-klWHC0 [root@localhost ~]#創(chuàng)建一個或多個卷組后,就可以創(chuàng)建邏輯卷了。
-
創(chuàng)建邏輯卷
Linux 系統(tǒng)使用邏輯卷來模擬物理分區(qū),并在其中保存文件系統(tǒng)。 Linux 系統(tǒng)會像處理物理分區(qū)一樣處理邏輯卷,允許你定義邏輯卷中的文件系統(tǒng),然后將文件系統(tǒng)掛載到虛擬目錄上。 要創(chuàng)建邏輯卷,使用
lvcreate命令。lvcreate命令通過指定卷組剩余的邏輯區(qū)段數(shù)來指定邏輯卷的大小。如果當前卷組沒有足夠的邏輯區(qū)段,則可以將向該卷組添加額外的物理卷,或者通過lvreduce命令來減少現(xiàn)有邏輯卷的大小。雖然通常不需要在其他 Linux LVM 命令中使用命令行選項,但
lvcreate命令要求至少輸入一些選項。-c, --chunksize ChunkSize[b|B|s|S|k|K|m|M|g|G]:指定快照、緩存池、薄池邏輯卷(thin pool logical volumes)的塊單位大小,默認為 KB。對于快照來說,該值必須是 4KiB 到 512KiB 之間 2 的次方,默認為 4KiB。對于緩存池來說,該值必須是32KiB and 1GiB之間 32KiB 的整數(shù)倍,默認為 64KiB。當通過邏輯緩存來指定大小,該值可能不小于緩存池的創(chuàng)建塊大小。對于薄池,該值必須是 64KiB 到 1GiB 之間 64 KiB 的整數(shù)倍。如果沒有指定池的元數(shù)據(jù)大小的話,默認值從 64 KiB 增長到適應池的元數(shù)據(jù)大?。ㄔ?128 MiB范圍內(nèi)); -C, --contiguous {y|n}:設置或重置邏輯卷的連續(xù)分配策略,默認不連續(xù)分配; -i,--stripes Stripes:指定條帶數(shù)。該值等于分散邏輯卷數(shù)據(jù)的邏輯卷數(shù)量。在創(chuàng)建 RAID 4/5/6 邏輯卷時,額外分區(qū)對于內(nèi)部解釋來說同樣必要。 -I --stripesize:指定每個條帶的大??; -l --extents:指定分配給新邏輯卷的邏輯區(qū)段數(shù),或者要用的邏輯區(qū)段的百分比; -L --size:指定分配給新邏輯卷的硬盤大小; --minor:指定設備的次設備號; -m --mirrors:創(chuàng)建邏輯卷鏡像; -M --persistent:讓次設備號一直有效; -n --name:指定新邏輯卷的名稱; -p --permission:為邏輯卷設置讀/寫權限; -r --readahead:設置預讀扇區(qū)數(shù); -R --regionsize:指定將鏡像分成多大的區(qū); -s snapshot:創(chuàng)建快照邏輯卷; -Z --zero:將新邏輯卷的前 1 KB 數(shù)據(jù)設置為零。大多數(shù)情況下用到的只是少數(shù)幾個選項。比如使用
lvcreate -L <size> <volume_group> -n <logical_volume>指定新邏輯卷的大小、所在的卷組、名稱后即可創(chuàng)建新的邏輯卷。-L 選項用于為要創(chuàng)建的邏輯卷指定空間大小,而 -n 選項用于為邏輯卷指定名稱。[root@localhost ~]# lvcreate -L 2G VG01 -n lv01 Logical volume "lv01" created. [root@localhost ~]#也可以使用 -l 選項按照卷組空間的百分比來指定要創(chuàng)建邏輯卷的大小,比如
lvcreate -l 50%FREE VG01 -n lv02命令將使用卷組剩余空間的 50% 來創(chuàng)建一個名為 lv02 的邏輯卷。如果想查看你創(chuàng)建的邏輯卷的詳細情況,可用lvdisplay <volume_group>命令。[root@localhost ~]# lvcreate -l 50%FREE VG01 -n lv02 Logical volume "lv02" created. [root@localhost ~]# lvdisplay VG01 --- Logical volume --- LV Path /dev/VG01/lv01 LV Name lv01 VG Name VG01 LV UUID OoyXAQ-6Jkh-isGh-Ak5N-vvZ3-qatN-o4Q6yP LV Write Access read/write LV Creation host, time localhost.localdomain, 2018-05-29 23:41:42 +0800 LV Status available # open 0 LV Size 2.00 GiB Current LE 512 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:3 --- Logical volume --- LV Path /dev/VG01/lv02 LV Name lv02 VG Name VG01 LV UUID Axe12D-fgnA-pCbv-Qq4F-nhC0-XT7l-MlGpKV LV Write Access read/write LV Creation host, time localhost.localdomain, 2018-05-29 23:47:05 +0800 LV Status available # open 0 LV Size 1.49 GiB Current LE 382 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:4 [root@localhost ~]# -
創(chuàng)建文件系統(tǒng)
運行完
lvcreate命令之后,邏輯卷就已經(jīng)產(chǎn)生了,但它還沒有文件系統(tǒng)。你必須使用相應的命令行程序來創(chuàng)建所需要的文件系統(tǒng)。[root@localhost ~]# mkfs.ext4 /dev/VG01/lv01 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 131072 inodes, 524288 blocks 26214 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=536870912 16 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done [root@localhost ~]# mkfs.ext3 /dev/VG01/lv02 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 97920 inodes, 391168 blocks 19558 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=402653184 12 block groups 32768 blocks per group, 32768 fragments per group 8160 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Allocating group tables: done Writing inode tables: done Creating journal (8192 blocks): done Writing superblocks and filesystem accounting information: done [root@localhost ~]# fdisk -l /dev/VG01/lv* Disk /dev/VG01/lv01: 2147 MB, 2147483648 bytes, 4194304 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 /dev/VG01/lv02: 1602 MB, 1602224128 bytes, 3129344 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 [root@localhost ~]#在創(chuàng)建了新的文件系統(tǒng)之后,可以用標準
mount命令將這個卷掛載到虛擬目錄中,就跟它是物理分區(qū)一樣。唯一的不同是你需要用特殊的路徑來標識邏輯卷。[root@localhost ~]# mount /dev/VG01/lv01 /appData [root@localhost appData]# ll -a /appData total 24 drwxr-xr-x. 3 root root 4096 May 30 00:00 . dr-xr-xr-x. 20 root root 4096 May 26 10:51 .. drwx------. 2 root root 16384 May 30 00:00 lost+found [root@localhost appData]#注意,
mkfs.ext4和mount命令中用到的路徑都有點奇怪。路徑中使用了卷組名和邏輯卷名,而不是物理分區(qū)路徑。文件系統(tǒng)被掛載之后,就可以訪問虛擬目錄中的這塊新區(qū)域了。
此外,還可以使用以下命令來操作邏輯卷:
- vgchange:激活和禁用卷組;
- vgscan:搜索所有卷組;
- pvresize:修改物理卷大??;
- lvresize:修改邏輯卷大?。?/li>
- lvscan:列出所有卷組中的所有邏輯卷;
- lvs:顯示邏輯卷信息;
- lsblk:顯示所有塊信息;
- lvremove:移除邏輯卷。
在手動增加或減小邏輯卷的大小時,要特別小心。邏輯卷中的文件系統(tǒng)需要手動修整來處理大小上的改變。大多數(shù)文件系統(tǒng)都包含了能夠重新格式化文件系統(tǒng)的命令行程序,比如用于 ext2、 ext3 和 ext4 文件系統(tǒng)的 resize2fs 程序。
動態(tài)調整邏輯卷大小
LV 擴容:
第一種方法:直接增大5G,寫“+5G”
- lv 擴容 5G
lvresize -L +5G /dev/mapper/vg_linuxidc-lv_root
- 文件系統(tǒng)大小變更
resize2fs /dev/mapper/vg_linuxidc-lv_root
第二種方法:原來是10G,增大5G就是“15G”
- lv擴容到15G
lvresize -L 15G /dev/mapper/vg_linuxidc-lv_u01
- 文件系統(tǒng)大小變更
resize2fs /dev/mapper/vg_linuxidc-lv_u01
注:以上的lvresize 命令操作也可以通過 lvextend 命令實現(xiàn)。
LV 縮減
- 需要先卸載目錄
umount /u01
- 這一步是否有根據(jù)執(zhí)行下一步的執(zhí)行返回決定,看下面的例子
e2fsck -f /dev/mapper/vg_linuxidc-lv_u01
- 文件系統(tǒng)大小變更
resize2fs /dev/mapper/vg_linuxidc-lv_u01 10G
- lv 縮減
lvresize -L 10G /dev/mapper/vg_linuxidc-lv_u01
- 掛載所有 /etc/fstab 中記錄的目錄
mount -a
動態(tài)擴容示例:
# 比如發(fā)現(xiàn)某個目錄鎖掛在的邏輯卷大小不夠用了,可以動態(tài)擴容(當然也可以動態(tài)減?。?# 新建一個5G大小的新分區(qū) /dev/sda3 后查看 sda 硬盤的現(xiàn)有分區(qū)情況
[root@localhost gitlab_rpms]# fdisk -l /dev/sda*
Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 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: 0x000d5723
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 38780927 18877440 8e Linux LVM
/dev/sda3 38780928 49266687 5242880 8e Linux LVM
Disk /dev/sda1: 524 MB, 524288000 bytes, 1024000 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 /dev/sda2: 19.3 GB, 19330498560 bytes, 37754880 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
# 但是查看 sda 硬盤的實際生成的分區(qū)情況時發(fā)現(xiàn)剛剛創(chuàng)建的 /dev/sda3 并未創(chuàng)建
[root@localhost gitlab_rpms]# ll /dev/sda*
brw-rw----. 1 root disk 8, 0 Dec 16 16:45 /dev/sda
brw-rw----. 1 root disk 8, 1 Dec 16 16:45 /dev/sda1
brw-rw----. 1 root disk 8, 2 Dec 16 16:45 /dev/sda2
# partprobe 命令重讀分區(qū)表即可顯示新建分區(qū)。
# 當出現(xiàn)刪除文件后出現(xiàn)仍然占用空間,或新建分區(qū)看不到新建分區(qū)時可以使用 partprobe 命令在不重啟的情況下重讀分區(qū)
[root@localhost gitlab_rpms]# partprobe
[root@localhost gitlab_rpms]# ll /dev/sda*
brw-rw----. 1 root disk 8, 0 Dec 16 16:52 /dev/sda
brw-rw----. 1 root disk 8, 1 Dec 16 16:52 /dev/sda1
brw-rw----. 1 root disk 8, 2 Dec 16 16:52 /dev/sda2
brw-rw----. 1 root disk 8, 3 Dec 16 16:52 /dev/sda3
[root@localhost gitlab_rpms]# fdisk -l /dev/sda3
Disk /dev/sda3: 5368 MB, 5368709120 bytes, 10485760 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
# 為新建分 /dev/sda3 分區(qū)創(chuàng)建同名的物理卷
[root@localhost gitlab_rpms]# pvcreate /dev/sda3
Physical volume "/dev/sda3" successfully created.
# 查看 sda 硬盤上的所有物理卷。
# /dev/sda2 和 /dev/sda3 都位于 cl 卷組,/dev/sda 和 /dev/sda1 并未創(chuàng)建物理卷所以無法查看
[root@localhost gitlab_rpms]# pvdisplay /dev/sda*
--- Physical volume ---
PV Name /dev/sda2
VG Name cl
PV Size 18.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4608
Free PE 0
Allocated PE 4608
PV UUID p6IMSf-lHv6-ZifS-cd0h-R7V7-2wom-gW3u2R
"/dev/sda3" is a new physical volume of "5.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sda3
VG Name
PV Size 5.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID rU9a3K-LuKe-P1nK-GRrd-ETgq-5a1l-aSwMcy
Failed to find physical volume "/dev/sda".
Failed to find physical volume "/dev/sda1".
# 查看卷組 cl 的情況
[root@localhost gitlab_rpms]# vgdisplay cl
--- Volume group ---
VG Name cl
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 1
Act PV 1
VG Size 18.00 GiB
PE Size 4.00 MiB
Total PE 4608
Alloc PE / Size 4608 / 18.00 GiB
Free PE / Size 0 / 0
VG UUID w73gEP-ways-grKH-YtfK-0hee-uisC-DfW1Wz
# 將新建的物理卷 /dev/sda3 添加到卷組 cl 上
[root@localhost gitlab_rpms]# vgextend cl /dev/sda3
Volume group "cl" successfully extended
# 再次查看卷組 cl 的情況,發(fā)現(xiàn)其大小已經(jīng)由之前的 18G 增加到 23G,正是物理卷(即新建分區(qū))/dev/sda3 的大小
[root@localhost gitlab_rpms]# vgdisplay cl
--- Volume group ---
VG Name cl
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 5
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 2
Act PV 2
VG Size 23.00 GiB
PE Size 4.00 MiB
Total PE 5887
Alloc PE / Size 4608 / 18.00 GiB
Free PE / Size 1279 / 5.00 GiB
VG UUID w73gEP-ways-grKH-YtfK-0hee-uisC-DfW1Wz
# 使用 df 命令查看邏輯卷 /dev/mapper/cl-root 的大小
[root@localhost gitlab_rpms]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 9.8G 7.7G 1.6G 84% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 84K 1.9G 1% /dev/shm
tmpfs 1.9G 9.1M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 477M 142M 307M 32% /boot
/dev/mapper/cl-home 5.8G 1.3G 4.3G 23% /home
tmpfs 378M 0 378M 0% /run/user/1002
tmpfs 378M 16K 378M 1% /run/user/42
tmpfs 378M 0 378M 0% /run/user/0
# 使用 lvdisplay 命令查看邏輯卷 /dev/cl/root 的大小
[root@localhost gitlab_rpms]# lvdisplay /dev/cl/root
--- Logical volume ---
LV Path /dev/cl/root
LV Name root
VG Name cl
LV UUID fuabl5-TPRQ-Y3i5-QCM3-F6vG-9cfC-yUuvp9
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2018-05-04 06:32:32 +0800
LV Status available
# open 1
LV Size 10.00 GiB
Current LE 2560
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
# 使用 vgdisplay 命令查看擴容后的 cl 卷組,發(fā)現(xiàn)有 5G 空閑空間
[root@localhost gitlab_rpms]# vgdisplay cl
--- Volume group ---
VG Name cl
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 5
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 2
Act PV 2
VG Size 23.00 GiB
PE Size 4.00 MiB
Total PE 5887
Alloc PE / Size 4608 / 18.00 GiB
Free PE / Size 1279 / 5.00 GiB
VG UUID w73gEP-ways-grKH-YtfK-0hee-uisC-DfW1Wz
# 使用 lvextend 命令來擴容 /dev/cl/root 邏輯卷(1279 就是 5 G 空間的 PE 數(shù)量)
[root@localhost gitlab_rpms]# lvextend -l +1279 /dev/cl/root
Size of logical volume cl/root changed from 10.00 GiB (2560 extents) to 15.00 GiB (3839 extents).
Logical volume cl/root successfully resized.
# 使用 lvdisplay 命令查看邏輯卷 /dev/cl/root 的大小已經(jīng)改變
[root@localhost gitlab_rpms]# lvdisplay /dev/cl/root
--- Logical volume ---
LV Path /dev/cl/root
LV Name root
VG Name cl
LV UUID fuabl5-TPRQ-Y3i5-QCM3-F6vG-9cfC-yUuvp9
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2018-05-04 06:32:32 +0800
LV Status available
# open 1
LV Size 15.00 GiB
Current LE 3839
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
# 但使用 df 命令查看邏輯卷 /dev/mapper/cl-root 的大小仍為改變
[root@localhost gitlab_rpms]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 9.8G 7.7G 1.6G 84% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 84K 1.9G 1% /dev/shm
tmpfs 1.9G 9.1M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 477M 142M 307M 32% /boot
/dev/mapper/cl-home 5.8G 1.3G 4.3G 23% /home
tmpfs 378M 0 378M 0% /run/user/1002
tmpfs 378M 16K 378M 1% /run/user/42
tmpfs 378M 0 378M 0% /run/user/0
# 使用 resize2fs 命令來增大或者收縮文件系統(tǒng)的大小
[root@localhost gitlab_rpms]# resize2fs /dev/cl/root
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/cl/root is mounted on /; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 2
The filesystem on /dev/cl/root is now 3931136 blocks long.
# 再次使用 df 命令查看邏輯卷 /dev/mapper/cl-root 的大小已經(jīng)改變
[root@localhost gitlab_rpms]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 15G 7.7G 6.3G 56% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 84K 1.9G 1% /dev/shm
tmpfs 1.9G 9.1M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 477M 142M 307M 32% /boot
/dev/mapper/cl-home 5.8G 1.3G 4.3G 23% /home
tmpfs 378M 0 378M 0% /run/user/1002
tmpfs 378M 16K 378M 1% /run/user/42
tmpfs 378M 0 378M 0% /run/user/0
[root@localhost gitlab_rpms]#
關于 LVM 的更詳細用法可以參考: