Hướng dẫn nâng dung lượng ổ cứng file system của hệ điều hành Linux trên VMware. - QuânSysAd's Blog

29 tháng 1 2016

Hướng dẫn nâng dung lượng ổ cứng file system của hệ điều hành Linux trên VMware.

Trong khi dùng hệ điều hành CentOS (Linux) trên VMware. Có thể bạn sẽ gặp trường hợp bị thiếu dung lượng ổ cứng nếu ban đầu bạn cấp phát cho máy ảo quá ít. Trong bài viết này mình sẽ hướng dẫn các bạn tăng dung lượng ổ cứng trên hệ điều hành Linux (CentOS).
Điều đặc biệt ở bài này, là mình sẽ nâng dung lượng của file system được mount vào đường dẫn /, tức là đường dẫn root của cây thư mục, đường dẫn này chứa toàn bộ file hệ điều hành cũng như các phần mềm của hệ điều hành trên hệ thống. Chỉ cần làm sai một thao tác thôi, thì khả năng cài lại hệ điều hành là rất cao. Nên các bạn hãy làm cẩn thận. BE CAREFULLY !!!
Các bạn nếu đọc và làm theo hướng dẫn này xin vui lòng đọc kỹ, sao lưu dữ liệu nếu cần thiết, làm từng bước một và chú ý các thông tin sai khác so với các máy trong hướng dẫn của mình. Tốt nhất là tạo snapshot hoặc clone máy ảo cho chắc. Vì chỉ cần sai một dòng lệnh thôi là dữ liệu của bạn có thể bị mất mát ngay.
Trong bài viết này tôi sẽ sử dụng hệ điều hành CentOS 7 và sử dụng logical volume manager (LVM).
Xin nói qua là : Phương pháp này sẽ sử dụng các dung lượng mới được cấp cho ổ cứng máy ảo để tạo ra một phân vùng primary (partition) mới, tức là hiện tại máy ảo của bạn nếu chỉ dùng 1 ổ đĩa vật lý thì ổ đĩa vật lý đó phải không có sẵn 4 phân vùng primary, vì bạn không thể tạo nhiều hơn 4 phân vùng, xin nói rõ hơn đoạn này là đối với ổ MBR thông thường thì 1 ổ đĩa vật lý chỉ tối đa tạo được 4 phân vùng primary, và MBR không thể làm việc với ổ vật lý dung lượng quá 2TB, nếu bạn muốn nhiều hơn, hãy dùng ổ cứng GPT. Nếu bạn đang có 4 phân vùng mà vẫn muốn thêm dung lượng thì bạn cần cân nhắc phương pháp khác ví dụ như gắn thêm ổ vật lý (phương pháp này chỉ là 1 trong nhiều phương pháp tăng dung lượng ổ cứng của Linux).
Trên đây là đang nói về ổ vật lý còn tất nhiên là với LVM thì bạn map nhiều ổ vật lý vào 1 logical volume nên dung lượng có thể lên rất nhiều. Với bản linux 64 bit mà sử dụng kernel 2.6 đổ lên thì dung lượng tối đa lên tới 8EB (tức khoảng 8 000 000 000 Gigabyte) là 8 triệu gigabyte. Con số này thực sự là lớn.
Trong hướng dẫn này mình đang dùng máy ảo hệ điều hành CentOS7 đang có 20GB dung lượng phân vùng file system và mình sẽ tăng dung lượng phân vùng này thêm 10GB lên thành 30GB.
Bước 1 : Đầu tiên ta cần xác định loại phân vùng (partition type):
Phương pháp này mình đã nói từ phái trên là sẽ dùng LVM, vì vậy ta sẽ kiểm tra partition type có phải thực sự là Linux LVM bằng cách sử dụng lệnh dưới đây.

fdisk -l
image
Như bạn đã thấy, ở trên hình trên /dev/sda5 được liệt kê là “Linux LVM” và nó có ID là 8e. 8e ở đây là mã hex (hex code) cho thấy nó là Linux LVM, trong khi 83 là Linux native partition. Hiện giờ ta đã xác nhận ta sẽ làm việc với LVM, nên ta có thể tiếp tục.
Hình ảnh dưới đây là thông tin về disk cho thấy ban đầu chúng ta chỉ có 20GB, đang ở trong logical volume có tên là /dev/mapper/Mega-root, đây là logical volume ta sẽ mở rộng với new disk.
image
Chú ý rằng /dev/mapper/Mega-root là volume hiện nay đang được tạo thành từ /dev/sda5, đây là volume ta sẽ expanding.
Đầu tiên ta cần tăng dung lượng máy ảo
image
Phần này chắc mình cũng không cần hướng dẫn nhiều nếu bạn đã làm quen với máy ảo.
Bước 2 Xác định disk space mới.
Một khi disk vật lý đã được tăng ở mức phần cứng (máy ảo), ta cần phải vào bên trong hệ điều hành và tạo một partition mới để dùng dung lượng này để tiến hành tiếp.
Trước khi ta có thể làm, ta cần phải kiểm tra vùng disk space mới chưa được unallocated được phát hiện bởi server, bạn có thể sử dụng lệnh fdisk -l để liệt kê các primary disk. Có thể bạn sẽ phải cần reboot server, hoặc rescan lại các device để không phải reboot. Để cho đơn giản mình sẽ reboot lại server.
Dưới đây là hình ảnh cho thấy vùng dung lượng mới đã được hiển thị.
image
Bước 3 Phân vùng dung lượng disk mới.
Mình đang làm việc với /dev/sda, vì thế ta có thể sử dụng fdisk để tạo một phân vùng primary mới dùng để tăng dung lượng ổ cứng. Chú ý rằng ta phải chưa tạo 4 phân vùng primary (ở ví dụ này ta đang có 2) thì mới dùng được phương pháp này.
Tiếp theo ta sẽ sử dụng fdisk để tạo partition mới. Ta có thể ấn nút m để hiển thị danh sách đầy đủ các commands của fdisk.
fdisk /dev/sda
Bấm phím n để tạo phân vùng mới.

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to  switch off the mode (command 'c') and change display units to 

Command (m for help): n  sectors (command 'u').
sau đó chọn p
để đánh dấu nó là primary partition.

Command action 

l logical (5 or over) 

p primary partition (1-4) 

p
Mình đã có /dev/sda1/dev/sda2 như trong các ảnh trước. Mình phải thực hiện sử dụng 3 đối với phân vùng mới và sẽ được tạo là /dev/sda3.

Partition number (1-4): 3
Ta chỉ cần ấn Enter 2 lần đối với cylinders đầu tiên hoặc cuối cùng mặc định để phần dung lượng unallocated phải đúng.

First cylinder (2611-3916, default 2611): "enter" Using default value 2611 

Last cylinder, +cylinders or +size{K,M,G} (2611-3916, default 3916): "enter" 

Using default value 3916
Tiếp theo , trong fdisk hãy ấn lệnh t để thực hiện thay đổi partition system ID.
t được chọn để thay đổi partition system ID, trong trường hợp này ta sẽ thực hiện thay phân vùng thứ 3, phân vùng này đã được tao từ bước trước.

Command (m for help): t 

Partition number (1-5): 3
Mã hex code 8e được nhập để chỉ đây là code cho Linux LVM, đây là loại ta muốn partition nhận, cũng như ta sẽ join nó với /dev/sda5 Linux LVM nguyên bản.

Hex code (type L to list codes): 8e 

Changed system type of partition 3 to 8e (Linux LVM)
w được sử dụng để ghi table vào disk và exit, về cơ bản tất cả các thay đổi đã thực hiện sẽ được lưu lại và sau đó bạn sẽ thoát khỏi fdisk.
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 
Syncing disks 
the next reboot or after you run partprobe(8) or kpartx(8)
Bạn sẽ nhìn thấy cảnh báo có nghĩa là để sử dụng bảng phân vùng mới với các thay đổi đã thực hiện, hệ thống cần phải reboot. Để đơn giản ta sẽ reboot, và sau khi khởi động lại ta sẽ nhìn thấy phân vùng /dev/sda3 mới với 10GB dung lượng sẽ được hiển thị theo ảnh dưới đây. Nếu không nhìn thấy phân vùng mới khi dùng lệnh fdisk -l bạn có thể sử dụng lệnh partprobe -s để scan lại các partitions. (Nếu không muốn reboot thì dùng lệnh partx -a /dev/sda3).
image
Trên đây bạn đã phân vùng xong, ta hiện giờ đã có phân vùng mới mà sử dụng phần disk space chưa được cấp phát khi tăng lên trong VMware.
Bước 4 Tăng dung lượng logical volume.
Ta sẽ sử dụng pvcreate command để tạo physical volume, sau đó nó sẽ được sử dụng bởi logical volume manager (LVM). Trong trường hợp này, physical volume sẽ là phân vùng mới /dev/sda3.

bash root@Mega:~# pvcreate /dev/sda3

 Device /dev/sda3 not found (or ignored by filtering).
Để không gặp lỗi này bạn có thể reboot hoặc dùng lệnh partprobe/partx nếu không muốn reboot, trong trường hợp này disk không hiển thị đúng mặc dù đã hiện fdisk -l. Sau khi reboot hoặc dùng partprobe/partx nó sẽ hết.
bash root@Mega:~# pvcreate /dev/sda3

 Physical volume "/dev/sda3" successfully created
Ta cần phải xác nhận tên của volume group hiện tại sử dụng vgdisplay command. Tên này sẽ thay đổi tùy theo máy bạn cài đặt, trong trường hợp của mình nó là tên của test server. vgdisplay cung cấp rất nhiều thông tin của volume group. Mình chỉ cho bạn thấy tên và kích thước hiện tại trong trường hợp này.

root@Mega:~# vgdisplay --- Volume group --- 
 VG Name Mega... 
VG Size 19.76 GiB
Giờ ta sẽ extend (mở rông) Mega volume group bằng cách add physical volume của /dev/sda3 mà ta đã dùng lệnh pvcreate từ trước.

root@Mega:~# vgextend Mega /dev/sda3
 Volume group "Mega" successfully extended
Sử dụng pvscan command, ta sẽ quét toàn bộ disk đối với physical volumes, việc này sẽ xác nhận phân vùng ban đầu /dev/sda5 và phân vùng physical voume /dev/sda3 mới tạo.

root@Mega:~# pvscan

 PV /dev/sda5 VG Mega lvm2 [19.76 GiB / 0 free]

 PV /dev/sda3 VG Mega lvm2 [10.00 GiB / 10.00 GiB free]

 Total: 2 [29.75 GiB] / in use: 2 [29.75 GiB] / in no VG: 0 [0 ]
Tiếp theo ta cần tăng logical voume (không phải physical volume), có nghĩa là ta sẽ lấy phần logical volume original và extend nó qua phân vùng physical volume mới /dev/sda3.
Đầu tiên hãy kiểm tra lại tên của logical volume sử dụng lvdisplay. Tên này sẽ thay đổi do cài đặt của bạn.

root@Mega:~# lvdisplay

--- Logical volume ---

LV Name /dev/Mega/root
Logical volume sau đó được extend sử dụng lvextend command.
root@Mega:~# lvextend /dev/Mega/root /dev/sda3 Extending logical volume root to 28.90 GiB 

Logical volume root successfully resized
Sau đó là bước cuối cùng để resize file system để nó có thể lấy phần dung lượng tăng thêm. Ta sẽ sử dụng lệnh dưới đây đối với phân vùng XFS:

xfs_growfs /dev/Mega/root
Chú ý nếu phân vùng là ext thì dùng lệnh resize2fs /dev/Mega/root
Vậy là đã xong, giờ với lệnh df ta có thể thấy tổng dung lượng còn trống disk space đã được tăng lên.
image

11 nhận xét:

Nặc danh nói...

Bài viết hay và hữu ích lắm bạn

Phú Mỹ nói...

Bạn trình bày nội dung hơi khó đọc

Nguyễn Tiến Quân nói...

Mình chủ yếu là vừa viết vừa giải thích để các bạn hiểu tại sao lại làm như thế. Còn bạn có thể tìm các bài step by step có nhiều trên mạng.

lagu nói...

Mình gặp lỗi tại:
root@Mega:~# lvextend /dev/Mega/root /dev/sda3

Fixed:
https://themacwrangler.wordpress.com/2015/01/16/re-sizing-partitions-in-centos7/

Như sau:
You should now have the free space available in VFree when you have a look using vgs.

# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- 69.51g 22.14g
• Now resize the centos-root partition.

# lvextend --size +22.13GB -r /dev/mapper/centos-root
Rounding size to boundary between physical extents: 22.13 GiB
Extending logical volume root to 67.47 GiB
Logical volume root successfully resized
meta-data=/dev/mapper/centos-root isize=256 agcount=4, agsize=2971392 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=11885568, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=5803, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 11885568 to 17687552

Nguyễn Tiến Quân nói...

Bạn phải đưa physical volume vào trong volume group chứa logical volume.

Unknown nói...
Nhận xét này đã bị tác giả xóa.
Unknown nói...

Trên "VMware vCloud Director" mình có resize dung lượng ổ cứng được không nhỉ, mình vào nhưng thấy nó disable đi chỉ hiển thị tổng dung lượng

Nguyễn Tiến Quân nói...

Bác resize bằng VMware vCloud Director thì nó chỉ là tăng dung lượng vật lý ở cấp độ máy ảo lên. Còn bước nữa là bác sẽ phải thao tác ở cấp độ logic để hệ điều hành nhận đủ dung lượng.

Nặc danh nói...

Cám ơn bạn, bài viết rất rõ ràng

Nặc danh nói...

AD cho mình hỏi khi mình gỗ lệnh này nó báo lỗi
vgextend centos /dev/sda3
Cannot archive volume group metadata for centos to read-only filesystem.

Nguyễn Tiến Quân nói...

/dev/sda3 để tạo physical volume bạn đã dùng lệnh pvcreate chưa ?