Tải bản đầy đủ (.pdf) (20 trang)

Nghiên cứu và thực hành thiết lập RAID Linux

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (829.15 KB, 20 trang )

NGHIÊN CỨU VÀ THỰC HÀNH THIẾT LẬP RAID LINUX

1. RAID ................................................................................................................. 1
2. Các loại RAID .................................................................................................. 1
3. Stripping (RAID 0) và Mirroring (RAID 1) ................................................. 2
4. Giải pháp sử dụng khả năng tính tốn (RAID 5/6) ...................................... 3
5. RAID 10 (Mirroring + Stripping) .................................................................. 4
6. Khi nào nên sử dụng RAID ............................................................................ 4
7. Nên chọn loại RAID nào? ............................................................................... 4
8. Tạo một mảng (Thiết lập với RAID 1) .......................................................... 4
9. Thiết lập với RAID 5 ....................................................................................... 9
10. Khôi phục ổ đĩa hỏng ................................................................................... 13
11. Quản lý phân vùng logic (Logical Volume Manager LVM) ..................... 13
12. Tạo các nhóm và các phân vùng .................................................................. 15
13. Mở rộng một phân vùng logic ...................................................................... 17
14. Giảm kích thước phân vùng logic ................................................................ 18


RAID
RAID
Lưu trữ dữ liệu trên hard disk là việc cần thiết để hỗ trợ việc truy cập dữ liệu trên máy chủ, nhưng
khi ổ đĩa bị hỏng, dữ liệu có thể bị mất. Có một vài cách để giải quyết vấn đề này. Một là sử dụng
LVM để nhóm nhiều ổ đĩa và thể hiện chúng như một thiết bị. Hai là có thể sử dụng BtrFS để làm
thực hiện chiến lược như LVM. Và cách cuối cùng là sử dụng RAID.
RAID cho phép sử dụng nhiều ổ đĩa như thể là một ổ đĩa lớn, cùng với các tùy chọn built-in khác.
Có 3 loại RAID phổ biến như sau:
Hardware RAID
Fake RAID
Software RAID
Hardware RAID sử dụng các bộ điều khiển phần cứng thường được gọi là RAID controllers, giúp
quản lý RAID một cách trong suốt với hệ điều hành. Các máy chủ mức độ doanh nghiệp thường sử


dụng các bộ điều khiển phần cứng. Ở các hệ thống, việc thiết lập RAID thường được thao tác qua
BIOS (basic input/output system) hoặc UEFI(Unified extensible firmware interface).
Fake RAID là dạng nhỏ hơn của hardware RAID được sử dụng trên các hệ thống nhỏ hơn hoặc
các máy tiín để bàn. Các nhà sản xuất có thể thêm chức năng RAID vào mainboard thơng qua chip.
Loại cài đặt RAID thứ 3 là thông qua phần mềm ở trong nhân Linux. Hệ thống này được là md
hoặc đa ổ đĩa. hệ thống md thuờng thể hiện tốt hơn fake RAID, và các mảng md RAID có thể di
chuyển giữa các máy. Báo cáo này tập trung việc sử dụng md RAID

Các loại RAID
Có vài loại - hoặc vài mức độ của RAID. Mức dộ sử dụng phụ thuộc vào điều gi quan trọng nhất.
Các mức độ khác nhau đưa ra các đánh đổi giữa không gian ổ đĩa sẵn có, độ tin cậy và tốc độ.


Các mức độ RAID thường được sử dụng
Sức chứa lưu trữ được tính bởi N(tổng số lượng ổ đĩa) trong mảng RAID (trừ các ổ đĩa lẻ) sau đó
nhân với kích thước của ổ đĩa.
Thơng thường 1 ổ đĩa cứng được sử dụng như là 1 ổ đĩa dự trữ. Khi có 1 ổ đĩa trong mảng lỗi, ổ
đĩa dự trữ được thay thế ngay lập tức.

Striping (RAID 0) và Morroring (RAID 1)
Cách cơ bản nhất để sử dụng RAID là với 2 ổ đĩa, có thể thiết lập RAID mức 0 hoặc RAID mức độ
1.

RAID 0, còn được gọi là striping, coi 2 ổ đĩa như là 1 ổ đĩa kết hợp với kích thước nhân đơi. Khi

ghi dữ liệu vào 1 mảng RAID, các phần của dữ liệu sẽ nằm trên mỗi ổ đĩa. Vì việc ghi dữ liệu Linux
có thể thực thi đồng thời trên các ổ đĩa, nên ghi dữ liệu vào RAID 0 nhanh hơn việc ghi dữ liệu vào 1
ổ đĩa đơn. Tuy nhiên, bất lợi là khi một trong các ổ đĩa hỏng, bất kì phần nào của các files mà đã
được lan truyền trên các ổ đĩa sẽ biến mất. Vì vậy tất cả dữ liệu bị mất
RAID 1, còn được gọi là mirroring, cho phép chỉ lưu trữ dữ liệu trên mảng như là 1 ổ đĩa đơn. Nó

luu trữ các bản sao chép giống nhau của các files trên các ổ đĩa, vì vậy nêu một ổ đĩa hỏng, dữ liệu
vẫn có thể nhận từ các ổ đĩa cịn lại. Vì tất cả dữ liệu cần được ghi lên mỗi ổ đĩa, RAID 1 khơng
cung cấp bất kì khả năng cải thiện hiệu năng ghi dữ liệu,

Lưu trữ file RAID 0 và RAID 1

Giải pháp sử dụng khả năng tính toán (RAID 5/6)
Để tối ưu lựa chọn tốt nhất - redunancy(dư thừa), storage size (kích thước lưu trữ) và speed (tốc độ)
có thể gọi sự hỗ trợ của khả năng của vi xử lý. RAID mức độ 5 sử dụng tối thiểu 3 ổ đĩa và cung cấp
khả năng sử dụng hiệu quả khơng gian lưu trữ có sẵn và gia tăng tốc độ đọc và ghi. Điều này có thể
đạt đươc bằng cách striping dữ liệu trên nhiều ổ đĩa và ghi checksum của mỗi stripe vào một ổ đĩa
khác(cịn được biết đến là block parity (tính chẵn lẻ khối). Nếu một ổ đĩa lỗi, checksum có thể được
sử dụng xây dựng lại dữ liệu trong các stripe bị thiếu.


Đánh đổi ở đây là cách tiếp cận này sử dụng sức mạnh của khả năng tính tốn để tính checksum.
Khi dữ liệu được ghi ra mảng, checksum cần được tính và lưu trữ trên một trong các ổ đĩa. Nếu 1 ổ
đĩa lỗi, checksum sau đó có thể được sử dụng bằng cách kết hợp với dữ liệu còn lại trên các ổ đĩa
để tính lại các phần thiếu của dữ liệu.
Ảnh dưới đây mô tả cách dữ liệu và checksum được tách giữa các ổ đĩa. B1, B2 và B3 là các
phần của file B. Bp là 1 checksum hoặc parity (chẵn lẻ). Nếu đĩa 1 hỏng, B2 có thể được tính từ B1,
B3 và
Bp, vì vậy khi ổ đĩa thay thế được thêm vào, nội dung của nó sẽ được khơi phục

Bố cục RAID 5 stripe giữa các ổ đĩa
RAID 5 và RAID 6 thường là lựa chọn tốt cho các máy chủ web, máy chủ file và các hệ thống mục
đích chung khác nơi mà hầu hết các giao dịch là đọc.
RAID 5 và RAID 6 không phải là lựa chọn tốt nhất cho môi trường cần ghi nhiều dữ liệu, cụ thể là
máy chủ cơ sở dữ liệu, vì nó sẽ có thể làm hại tới hiệu năng tổng thể
Trong trường hợp 1 ổ đĩa hỏng, cần phải hy sinh hiệu năng để giữ hệ thống hoạt động. Một khi ổ

đĩa hỏng được thay, dữ liệu sẽ cần được xây dựng lại dựa trên thông tin chẵn lẻ. Điều này sẽ mất
một khoảng đáng kể của toàn bộ hiệu năng của mảng. Thời gian cho những lần xây dựng lại này
tiếp tục tăng lên sau mỗi năm, vì các ổ đĩa ngày càng lớn hơn.
Lưu ý rằng, sử dụng RAID không phải là giải pháp thay thế cho việc tạo backup thông thường. Sử
dụng RAID sẽ phịng ngừa trường hợp phần cứng hỏng nhưng khơng phải cho việc xóa dữ liệu có
chủ đích.

RAID 10 (Morroring + Stripping)
RAID 10 yêu cầu ít nhất 4 ổ đĩa và là sự kết hợp của RAID 1 và RAID 0. Điều này sẽ giúp tăng cả
tốc độ và sự dự trữ. RAID 10 thường được khuyến nghị sử dụng nếu có nhu cầu về tốc độ nhưng


vẫn cần sự dư thừa. Trong trường hợp dùng 4 ổ đĩa cứng, hai ổ đĩa cứng được tạo bản sao
(mirroring) giữ một nửa dữ liệu được cắt (strip) và hai bản sao còn lại giữ nửa dữ liệu còn lại. Điều
này có nghĩa là nếu một ổ đĩa bất kỳ nào hỏng, họăc thậm chí có thêm ổ đĩa thứ 2 bị hỏng (ổ đĩa ở
trong nhóm 2 ổ được sao chép cịn lại) thì dữ liệu vẫn khơng bị mất.

Khi nào nên sử dụng RAID
RAID cực kì hữu dụng nếu thời gian vận hành và tính sẵn có là quan trọng. Backup sẽ đảm bảo
việc mất mát dữ liệu. Nhưng, việc phục hồi lượng lớn dữ liệu, khi gặp sự cố ổ đĩa hỏng, có thể mấy
hàng tiếng đồng hồ để thực hiện. Các bản backup có thể từ hàng giờ hoặc hàng ngày trước, các
phần dữ liệu được lưu và được thay đổi sẽ khơng có trong bản backup gần đây nhất. RAID cho
phép dù có một hoặc nhiều ổ đĩa hỏng thì vẫn khơng có dữ liệu bị mất và trong nhiều trường hợp,
không phải chịu thời gian ngưng chạy của hệ thống.
RAID cũng hữu dụng nếu có vấn đề liên quan đến đọc ghi (IO), trường hợp mà các ứng dụng
đang đợi trên ổ đĩa để thực hiện các công việc. RAID cung cấp nhiều thông lượng hơn bằng việc
cho phép đọc và ghi dữ liệu từ nhiều ổ cứng thay vì một.

Nên chọn loại RAID nào?
Khơng sử dụng RAID: nếu hệ thống có thể chịu đựng vài tiếng đồng hồ bị down và/ họă mất dữ

liệu trong khi khôi phục hệ thống từ các bản backup
RAID 0: Nếu dữ liệu không quan trọng và có thể để mất, nhưng hiệu năng lại quan trọng (cụ thể
là cache)
RAID 1: Nêu cần ưu tiên việc dư dữ liệu để đảm bảo thời gian chạy hệ thống (uptime) một cách
khơng tốn kém.
RAID 5/6: Nêu có máy chủ web, mơi trường đọc dữ liệu cao họăc có các mảng lưu trữ rất lớn như
là một đối tượng.
RAID 10: Cân bằng giữa tốc độ đọc ghi cũng như việc dự trữ dữ liệu.

Tạo một mảng (Thiết lập với RAID 1)
Để bảo vệ dữ liệu trên máy khỏi trường hợp ô đĩa bị hỏng, vì vậy việc sử dụng RAID là cần thiết.
Việc sử dụng mức độ RAID nào phụ thuộc số lượng ổ đĩa cứng có sẵn. Đầu tiên cần bảo đảm rằng
có ít nhất 3 ổ đĩa và tạo các partition có kích thước giống nhau trên chúng.
Nếu khơng có đủ ổ đĩa để sử dụng RAID, có thể sử dụng nhiều partitions có kích thước
giống nhau trên một ổ đĩa và sử dụng chúng như là các thành phần trong mảng RAID. Cách
này cho phép thử cài đặt và quản lý RAID. Hiệu năng theo cách thiết lập này sẽ khá chậm,
vì dữ liệu sẽ cần được ghi vào các phần khác nhau của cùng một ổ đĩa nhiều lần. Nó cũng
khơng cung cấp khả năng phục hồi chống lại ổ đĩa lỗi. Nếu ổ đĩa này hỏng, thì mảng RAID
cũng sẽ lỗi.


Ví dụ đầu tiên khởi tạo RAID 1, cần sử dụng 3 partition (ở ví dụ này là /dev/sda2 /dev/sda3 và
/dev/sda4) với kích thước giống nhau thì RAID mới hoạt động được. Thiết lập tạo 3 partition 1 G và
thiết lập loại partition là fd00 - Linux RAID
$ sudo gdisk /dev/sda3
GPT fdisk (gdisk) version 0.8.6
Partition table scan:
MBR: not present
BSD: not present
APM: not present

GPT: not present
Creating new GPT entries.
Command (? for help): n
Partition number (1-128, default 1):
First sector (34-16777182, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-16777182, default = 16777182) or {+-}size{KMGTP}: 2G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): fd00
Changed type of partition to 'Linux RAID'
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE
EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.


Xóa bảng phân vùng và tạo 1 phân vùng RAID
Lặp lại tiến trình này cho 2 partition /dev/sda2 và /dev/sda4. Tuy nhiên nếu các ổ đĩa có cùng kích
thước (lựa chọn tốt nhất là các ổ đĩa cùng nhà sản xuất), việc phân chia các ổ đĩa là không cần thiết.
Sử dụng package mdadm để thao tác và quản lý RAID. Để tạo một mảng, cần chỉ định chế độ
create , mức độ RAID và các partition thành phần của mảng.
$ sudo mdadm --create /dev/md0 --level=raid1 --raid-devices=2 /dev/sda2
/dev/sda3
--spare-devices=1 /dev/sda4
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that


your

boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
Câu lệnh trên tạo 1 thiết bị có thể gắn (mount) là /dev/md0 và đây cũng là thiết bị RAID 1 được tạo
bởi 2 partitions /dev/sda2 và /dev/sda3 , /dev/sda4 là partition dự trữ.
Tạo hoặc chạy một mảng RAID sẽ khiến module nhân md được tải lên và hiển thị thông tin trạng
thái. Kiểm tra log nhân qua lệnh dmesg


$ sudo dmesg
[ 9508.794689] md: bind<sdc>
[ 9508.795609] md: bind<sdd>
[ 9508.795996] md: bind<sde>
[ 9508.806492] md: raid1 personality registered for level 1
[ 9508.807304] md/raid1:md0: not clean -- starting
background reconstruction
[ 9508.807306] md/raid1:md0: active with 2 out of 2 mirrors
[ 9508.807318] md0: detected capacity change from 0 to 8584626176
[ 9508.809302] RAID1 conf printout:
[ 9508.809305] --- wd:2 rd:2
[ 9508.809306] disk 0, wo:0, o:1, dev:sdc
[ 9508.809307] disk 1, wo:0, o:1, dev:sdd
[ 9508.812318] md: resync of RAID array md0
[ 9508.812320] md: minimum _guaranteed_ speed: 1000 KB/sec/disk.
[ 9508.812321] md: using maximum available idle IO bandwidth (but not
more than 200000 KB/sec) for resync.

[ 9508.812323] md: using 128k window, over a total of 8383424k.
[ 9508.821845] md0: unknown partition table
[ 9550.509411] md: md0: resync done.
[ 9550.516479] RAID1 conf printout:
[ 9550.516481] --- wd:2 rd:2
[ 9550.516483] disk 0, wo:0, o:1, dev:sdc
[ 9550.516484] disk 1, wo:0, o:1, dev:sdd
[ 9550.517712] RAID1 conf printout:
[ 9550.517715] --- wd:2 rd:2
[ 9550.517716] disk 0, wo:0, o:1, dev:sdc
[ 9550.517717] disk 1, wo:0, o:1, dev:sdd
Để kiểm tra trạng thái của thiết bị RAID, sử dụng lệnh mdadm với chế độ truy vấn --detail
$ sudo mdadm --query --detail /dev/md0 /dev/md0:
Version : 1.2
Creation Time : Mon Jun 20 09:41:18 2016
Raid Level : raid1
Array Size : 8383424 (8.00 GiB 8.58 GB)
Used Dev Size : 8383424 (8.00 GiB 8.58 GB)
Raid Devices : 2


Total Devices : 3
Persistence : Superblock is persistent
Update Time : Mon Jun 20 09:42:00 2016
State : clean
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1 Name : au-mel-centos-1.example.com:0 (local to host
gateway.example.com)

UUID : ca66c4e2:49e8c87e:94d311de:01ca4f55
Events : 17
Number Major Minor RaidDevice State
0 8 33 0 active sync /dev/sda2
1 8 49 1 active sync /dev/sda3
2 8 65 - spare /dev/sda4
Hiển thị thông tin về mảng, cũng như là trang thái chi tiết của mỗi thành phần. Trong ví dụ
đang sử dụng mảng RAID 1, có thể thấy /dev/sda2` /dev/sda3 đang ở trạng
thái active và sync . Điều này có nghĩa rằng bất kì dữ liệu được ghi vào thiết bị
RAID thì ngay lập tức được ghi vào cả /dev/sda2 và /dev/sda3`. Nếu có thiết bị nào

hỏng, partition dự trữ (/dev/sda4) sẽ tự động được kích hoạt và đồng bộ.
Có thể kiểm tra nhanh thiết bị RAID bằng cách truy vấn file hệ thống /proc :
$ sudo cat /proc/mdstat Personalities :
[raid1]

md0 : active raid1 sda4[2](S)

sda3[1] sda2[0]
2045952 blocks super 1.2 [2/2] [UU]
unused
devices: <none>
Kí hiệu [UU] thể hiện [2/2] thiết bị đang hoạt động. Nêu một thiết bị gỡ hoặc hỏng, kết quả có thể
là [U_] . (S) sau thiết bị thể hiện nó đang được sử dụng như là vùng dự trữ.
Vào lúc khởi động, máy Linux sẽ gọi mdadm . Phụ thuộc vào thiết lập của nó, cơng cụ sẽ qt tất cả
các partition hoặc các ổ đĩa được định nghĩa cho siêu khối RAID. Nếu tìm được bất cứ cái nào, nó
sẽ phân tích chúng và cố gắng lắp ghép và bắt đầu tất cả mảng RAID. Có thể định nghĩa rõ ràng các
mảng RAID trong file thiết lập của mdadm , để đảm bảo các tên node thiết bị không thay đổi. File thiết
lập định nghĩa các mảng trong /etc/mdadm/mdadm.conf trên Ubuntu.
# mdadm.conf

# # Please refer to mdadm.conf(5) for information about this file.
#


# by default (built-in), scan all partitions (/proc/partitions) and
all # containers for MD superblocks. alternatively, specify devices to
scan, using # wildcards if desired.
#DEVICE partitions containers
# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes
# automatically tag new arrays as belonging to the local system
HOMEHOST <system>
# instruct the monitoring daemon where to send mail alerts
MAILADDR root
# definitions of existing MD arrays
# This file was auto-generated on Tue, 10 May 2016 21:55:12 +1000
# by mkconf $Id$

File config madadm.conf mặc định
Để thêm định nghĩa cho mảng RAID 1, thêm vào mdadm.conf dòng sau:
ARRAY /dev/md0 level=raid1 num-devices=2 spares=1
UUID=b2847c74:af06ebb0:9a1f19f6:132aed7f
devices=/dev/sda2,/dev/sda3,/dev/sda4

Thiết lập với RAID 5
Nêu có ít nhất 4 ổ đĩa cứng, có thể tạo được RAID 5. Để tạo mảng RAID 5, cần tháo mảng RAID 1
đầu tiên. Để dừng mảng RAID 1, giải phóng tất cả thiết bị nó sử dụng:
$ sudo mdadm --manage /dev/md0 --stop
mdadm: stopped /dev/md0
Có thể sử dụng những thiết bị đã tháo rời (/dev/sda2 ,...) cho mảng RAID 5 mới. Xóa thiết lập đã

thêm ở file mdadm.conf . Thiết lập các partition dưới dạng "Linux RAID" bằng lệnh sudo gdisk
/dev/sdax


Tạo một mảng RAID 5 với 3 thiết bị và 1 thiết bị dùng để dự trữ.

$ sudo mdadm --create /dev/md0 --level=raid5 --raid-devices=3 -sparedevices=1 /dev/sda5 /dev/sda6 /dev/sda7 /dev/sda8 [sudo]
password for vpoat:
mdadm: partition table exists on /dev/sda5
mdadm: partition table exists on /dev/sda5 but will be lost
or

meaningless after creating array mdadm: partition

table exists on /dev/sda6
mdadm: partition table exists on /dev/sda6 but will be lost
or
meaningless after creating array mdadm: partition
table exists on /dev/sda7 mdadm: partition table exists on
/dev/sda7 but will be lost or
meaningless after
creating array mdadm: partition table exists on /dev/sda8
mdadm: partition table exists on /dev/sda8 but will be lost
or
meaningless after creating array Continue creating
array? y mdadm: Defaulting to version 1.2 metadata mdadm:
array /dev/md0 started.


$ cat /proc/mdstat

Personalities : [raid1] [raid6] [raid5] [raid4]

md0

: active raid5 sda7[4] sda8[3](S) sda6[1] sda5[0]
2043904 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3]
[UUU]
unused
devices: <none>
Mảng RAID 5 đã được tạo. Nếu có đủ ổ đĩa cứng, có thể tăng kích thước của mảng RAID 5. Điều
này khiến cho dữ liệu được dịch và checksum sẽ được tính lại một khoảng thời gian. Ví dụ ở đây
thêm ổ đĩa /dev/sda9 vào mảng qua lệnh mdadm với tùy chọn --add
$

sudo mdadm --manage /dev/md0 --add /dev/sda9

mdadm: added /dev/sda9
Để thêm nhiều thiết bị trong 1 lệnh, chỉ cần liệt kê các ổ đĩa sau tùy chọn --add . Kiểm tra nhanh
qua lệnh cat /proc/mdstat thể hiện cả sda8 và sda9 được liệt kê là ổ đĩa dự trữ.
$ cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
sda9[5](S) sda7[4] sda8[3](S) sda6[1] sda5[0]

md0 : active raid5
2043904 blocks

super 1.2 level 5, 512k chunk, algorithm 2 [3/3]
[UUU]
unused
devices: <none>

Việc thêm /dev/sda9 đang được sử dụng là ổ dự trữ, có thể mở rộng mảng từ 3 ổ thành 4 ổ đĩa
lưu trữ với lệnh mdadm trong chế độ grow . Một trong những các ổ dự trữ sẽ tự động được sử dụng
cho việc này. Nếu có sự cố mất điện xảy ra trong khi đang mở rộng mảng, dữ liệu có thể bị mất. Để
ngăn chặn điều này, thêm tùy chọn --backup-file . Đảm bảo rằng không lưu file backup trong thư
mục /tmp (thư mục bị làm rỗng trong quá trình khởi động)
$ sudo mdadm --grow /dev/md0 --raid-disks=4 --backupfile=/root/raidbackup-file mdadm: Need to backup 3072K of critical
section..
Kiểm tra lại thông tin mảng RAID

$ cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]
md0 : active raid5 sda9[5] sda7[4] sda8[3](S) sda6[1]
sda5[0]

3065856 blocks super 1.2 level 5, 512k chunk,

algorithm 2 [4/4] [UUUU]
unused devices: <none>


Kiểm tra cho thấy có 4 ổ đĩa hoạt động và 1 ổ đĩa dự trữ.

Khôi phục ổ đĩa hỏng
Để mơ phỏng ổ đĩa hỏng, có thể sử dụng mdadm để thông báo với kernel rằng ổ đĩa /dev/sda9
hỏng
$ sudo mdadm --manage /dev/md0 --fail
/dev/sda9 mdadm: set /dev/sda9 faulty in
/dev/md0
Bây giờ, hệ thống con RAID biết ổ đĩa nào hỏng. Điều này giống với thông báo lỗi khi driver RAID
phát hiện có một lỗi đã xảy ra ở một trong các ổ đĩa của mảng.

$ cat /proc/mdstat
Personalities : [raid1] [raid6] [raid5] [raid4]

md0 :

active raid5 sda9[5](F) sda7[4] sda8[3] sda6[1] sda5[0]
3065856 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4]
[UUUU]
unused
devices: <none>
ổ đĩa /dev/sda9 được đánh dấu là hỏng với kí hiệu (F) và /dev/sda8 (trước đây được đánh
dấu là ổ đĩa dự trữ) bây giờ được sử dụng là ổ đĩa lưu trữ chính của mảng.

Kiểm tra log hệ thống để đảm bảo rằng bộ giám sát RAID đã nhận biết được những sự thay đổi
này và hành động hợp lý. Sử dụng lệnh journalctl -xb để xem thông điệp

Hệ thống RAID hoạt động để bảo vệ dữ liệu và mảng vẫn cịn ngun. Tiếp theo, cầ xóa ổ đĩa
hỏng ra khỏi mảng và thay thế nó.
Đầu tiên, gọi lệnh mdadm để xóa ổ đĩa hỏng khỏi mảng RAID.


$ sudo mdadm --manage /dev/md0 --remove /dev/sda9
mdadm: hot removed /dev/sda9 from /dev/md0
Bước tiếp theo phụ vào bộ điều khiển ổ đĩa. Nêu nó hỗ trợ thay nóng ổ đĩa, có thể tháo ổ đĩa hỏng
và thay nó với cái mới. Nếu không, cần tắt máy để thay thế ổ đĩa.
Khi thay ổ đãi mới và khởi động máy, cần phân vùng ổ đĩa mới giống như ổ đĩa nó thay thế. Khi
việc phân vùng hoàn thành, thêm phân vùng mới vào mảng RAID qua lệnh mdadm
$ sudo mdadm --manage /dev/md0 --add /dev/sda10
mdadm: added /dev/sda10
cat /proc/mdstat

Personalities : [raid1] [raid6] [raid5] [raid4]
md0 : active raid5 sda10[5](S) sda7[4] sda8[3] sda6[1] sda5[0]
3065856 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4]
[UUUU]
unused
devices: <none>
Ổ đĩa mới được thêm vào như là ổ đĩa dự trữ, sẵn sàng để thay thế nếu có ổ đĩa khác hỏng.

Quản lý phân vùng logic (Logical Volume Manager LVM)
Theo cách thông thường, ổ đĩa cần được phân vùng và tạo file hệ thống trên các phân vùng để truy
cập. Vấn đề là, một khi phân vùng ổ đĩa, khó có thể thay đổi kích thước các phân vùng hoặc thêm
một phân vùng khác. Hơn nữa nếu thêm các ổ đĩa và phân vùng, dữ liệu có thể lan truyền trên nhiều
vị trí và thư mục. Điều này khiến việc hợp nhất, back up và quản lý dữ liệu khó hơn và có khả năng
khiến nó khó hơn cho người sử dụng để tìm dữ liệu của họ. Để vượt qua vấn đề này, quản lý phân
vùng logic được tạo.
Thay vì tách một ổ đĩa thành các phân vùng cố định những cái mà được lưu trữ trên vùng cố định
của ổ đĩa, LVM trộn lẫn một hoặc nhiều phân vùng hoặc thiết bị thành 1 nhóm phân vùng logic. Sau
đó có thể linh hoạt tạo, thay đổi kích thước và xóa các phân vùng trong một nhóm phân vùng, xóa
bỏ việc cần phải gỡ (unmount) các phân vùng hoặc khởi động lại hệ thống để cập nhật ánh xạ phân
vùng.
Hệ thống LVM có 3 lớp. Lớp ở dưới cùng gồm các phân vùng vật lý: các ổ đãi, các phân vùng
hoặc các mảng RAID. Phân vùng vật lý được sử dụng để tạo các nhóm phân vùng. Một nhóm phân
vùng có thể bao gồm một hoặc nhiều phân vùng vật lý. Cuối cùng, một nhóm phân vùng có thể chứa
bất kỳ số lượng phân vùng vật lý.


Mơ hình LVM

Nhóm phân vùng



Phân vùng vật lý

Tạo các nhóm và các phân vùng
Nêu muốn sử dụng một phân vùng với LVM, cần thiết lập loại của nó thành 8e00 - Linux LVM sử
dụng gdisk. Cũng có thể sử dụng tồn bộ một ổ đĩa hoặc mảng RAID để lưu trữ cho LVM.
Trong ví dụ dưới đây, sẽ thiết lập LVM trên mảng RAID 5 dược tạo ở trước. Các bước tương tự
như khi thiết lập LVM trên RAID 1, các phân vùng riêng lẻ hoặc toàn bộ các ổ đĩa.
Mỗi thiết bị trong các thiết bị lưu trữ được sử dụng bởi LVM được gọi là phân vùng vật lý (physical
volume PV). Có thể đánh dấu một thiết bị qua lệnh pvcreate (nêu package lvm2 chưa được cài đặt,
dùng lệnh sudo apt install lvm2 )
$ sudo pvcreate /dev/md0
Physical volume "/dev/md0" successfully created
Lệnh thực thi ở trên ghi một watermark nhỏ vào phần đầu của thiết bị, nhận dạng nó cho việc sử
dụng LVM. Có thể liệt kê tất cả các thiết bị trên hệ thống qua lệnh pvs
$ sudo pvs
PV

VG Fmt

/dev/md0

Attr PSize PFree

lvm2 ---

2.92g 2.92g

Tạo nhóm phân vùng
sudo vgcreate vol_group /dev/md0

Liệt kê tất cả nhóm phân vùng trên hệ thống qua lệnh vgs
$ sudo vgs
VG
vol_group

#PV #LV #SN Attr
1

Tạo phân vùng logic

0

VSize VFree

0 wz--n- 2.92g 2.92g


$ sudo lvcreate -L 2G -n logic_vol vol_group
Logical volume "logic_vol" created.
Xóa phân vùng logic
$ sudo lvremove /dev/vol_group/logic_vol
Tạo phân vùng logic qua lệnh lvcreate , tham số cần chỉ định tên, kích thước và nhóm phân
vùng.
Câu lệnh dưới tạo thêm một phân vùng logic với kích thước 0.9G.
$ sudo lvcreate --name www --size 0.9G vol_group
Rounding up size to full physical extent 924.00 MiB
Logical volume "www" created.
$ sudo lvs
LV
VG

Attr
LSize
Pool Origin Data%
Move Log Cpy%Sync Convert
logic_vol vol_group -wi-a----www
vol_group -wi-a----- 924.00m

Meta%
2.00g

Phần còn lại cần làm là tạo một file hệ thống trên phân vùng logic và gắn nó ở đâu đó. Để làm vậy,
cần tên node thiết bị cho phân vùng logic. Điều này được quản lý bởi driver được gọi là
devicemapper , cái mà tạo đầu vào node thiết bị cho bất kì phần vùng nào được tạo.

Một phân vùng logic có thể truy cập qua /dev/mapper/<vgname>-<lvname> nó được symlink từ
/dev/<vgname>/<lvname> . Bởi vậy đơi với phân vùng logic www mới tạo, có thể sử dụng
/dev/vol_group/www . Nên tạo 1 file hệ thống XFS cho phân vùng logic này sử dụng câu lệnh sau:

$ sudo mkfs.xfs /dev/vol_group/www
meta-data=/dev/vol_group/www
=
=

crc=1

isize=512

agcount=8, agsize=29568 blks

sectsz=512


attr=2, projid32bit=1

finobt=1, sparse=0, rmapbt=0,

reflink=0
data

=

=
=version 2
log
sectsz=512
extsz=4096

bsize=4096

blocks=236544, imaxpct=25

sunit=128
swidth=256 blks naming
bsize=4096
ascii-ci=0 ftype=1 log
=internal
bsize=4096
blocks=624, version=2
=
sunit=8
blks,

lazy-count=1
realtime
=none
blocks=0, rtextents=0

Có thể sử dụng phân vùng trên như thể nó là một phân vùng thơng thường và thêm nó vào file
/etc/fstab , bởi vậy nó được tự động gắn trên /var/wwww khi máy khởi động. Đối với điều này, có

thể sử dụng tên node thiết bị hoặc UUID của file hệ thống được tạo. Lệnh blkid hiển thị tất cả thơng
tin đó, trong đó có thông tin của phân vùng logic vừa tạo như sau /dev/mapper/vol_group-www:
UUID="dbfb90af-6d4d-41ae-8dcc-97ce2d95d9e8" TYPE="xfs" . Nội dung thêm vào file


/etc/fstab trong như thế này

# /dev/mapper/vol_group-www
UUID=dbfb90af-6d4d-41ae-8dcc-97ce2d95d9e8 /var/www xfs defaults 0 0
Sau đó tạo thư mục /var/www và gắn nó
$ sudo mkdir /var/www
$ sudo mount /var/www

Mở rộng một phân vùng logic
Sử dụng LVM dường như cung cấp khả năng sử dụng các ổ đĩa một cách mềm dẻo. Giả sử, phân
vùng /var/www được sử dụng cho một trang web và kích thước của nó chuẩn bị vượt hơn 0.9G.
Nếu khơng có LVM, sẽ cần tạo một phân vùng mới có đủ dụng lượng, sao chép tất cả dữ liệu sang
và đảm bảo /etc/fstab được cập nhật. Tuy nhiên, với LVM có thể đơn giản mở rộng phân vùng
logic và thay đổi kích thước của file hệ thống trên nó. Nếu khơng cịn dung lượng trong nhóm phân
vùng, có thể thêm một phân vùng vật lý vào nhóm đó.
Cần hồn thành 2 bước để an tồn thay đổ kích thước file hệ thống được chứa trong phân vùng
logic. Đầu tiên, cần thay đổi kích thước chính phân vùng logic này, thứ hai, thay đổi kích thước của

file hệ thống. LVM làm các cơng việc này dễ dàng.
Phân vùng có thể được mở rộng sử dụng lvextend . Cần chỉ định tổng kích thước mới hoặc kích
thước đựợc tăng lên theo ý muốn, và tên của phân vùng. Bằng cách thêm dấu + trước tham số kích
thức và chỉ định kích thước được thêm vào kích thước hiện tại.
$ sudo lvextend --size +1G --resizefs /dev/vol_group/www
Size of logical volume vol_group/www changed from 924.00 MiB (231
extents) to 1.90 GiB (487 extents).
Logical volume vol_group/www successfully resized.
meta-data=/dev/mapper/vol_group-www isize=512

agcount=8, agsize=29568

blks

data

=

sectsz=512

attr=2, projid32bit=1

=

crc=1

finobt=1 spinodes=0 rmapbt=0

=


reflink=0

=

bsize=4096

=
=version 2
=internal
sectsz=512
extsz=4096
498688

blocks=236544, imaxpct=25

sunit=128
swidth=256 blks naming
bsize=4096
ascii-ci=0 ftype=1 log
bsize=4096
blocks=624, version=2
=
sunit=8 blks, lazy-count=1 realtime =none
blocks=0, rtextents=0 data blocks changed from 236544 to

Câu lệnh trên thêm 1G (+1G) vào phân vùng logic /dev/vol_group/www . Tùy chọn --resizefs
cho phép LVM thực thi xfs_growfs sau khi thay đổi kích thước phân vùng logic. Để chỉ định kích
thước tổng mới mà khơng tự động resize file hệ thống, bỏ tùy chọn -r , sau đó thay đổi kích thước



file hệ thống thủ công sử dụng xfs_growfs . Nếu file hệ thống là Ext4, sử dụng công cụ resize2fs
.
$ df -h /var/www
/dev/mapper/vol_group-www

1.9G

35M

1.9G

2% /var/www

$ sudo lvextend -s 0.5G /dev/vol_group/www
Size of logical volume vol_group/www changed from 1.90 GiB (487
extents) to 2.50 GiB (640 extents).

Logical volume vol_group/www

successfully resized.
$

sudo xfs_growfs /dev/vol_group/www

meta-data=/dev/mapper/vol_group-www isize=512

agcount=17, agsize=29568

blks


data

=

sectsz=512

attr=2, projid32bit=1

=

crc=1

finobt=1 spinodes=0 rmapbt=0

=

reflink=0

=

bsize=4096

blocks=498688, imaxpct=25

=

sunit=128

swidth=256 blks naming


=version 2

bsize=4096

ascii-ci=0 ftype=1 log

=internal

bsize=4096

blocks=624, version=2

=

sectsz=512

sunit=8 blks, lazy-count=1 realtime =none

extsz=4096

blocks=0, rtextents=0 data blocks changed from 498688 to

655360
$ df -h

/var/www

Filesystem

Size


/dev/mapper/vol_group-www

2.5G

Used Avail Use% Mounted on
36M

2.5G

2% /var/www

Giảm kích thước phân vùng logic
File hệ thống cũng có thể co lại. Để co lại file hê thống và một phân vùng vật lý, làm theo các bước
của phần trước theo chiều ngược lại và sử dụng câu lệnh lvreduce . Đảm bảo rằng, không thu nhỏ
phân vùng logic nhỏ hơn file hệ thống nó chứa. Ví dụ dưới đây tạo một phân vùng logic, format dưới
dạng Ext4 và giảm kích thước.
$ sudo lvcreate --name logic2 --size 0.3G vol_group
Rounding up size to full physical extent 308.00
MiB
WARNING: ext4 signature detected on
/dev/vol_group/logic2 at offset 1080.
Wipe it? [y/n]: y
Wiping ext4 signature on /dev/vol_group/logic2.
Logical volume "logic2" created.


$ sudo mkfs.ext4 /dev/vol_group/logic2
mke2fs 1.44.1 (24-Mar-2018)
Creating filesystem with 315392 1k blocks and 78936 inodes

Filesystem UUID: 961bf628-7a04-41e7-aef1-13ec99371cb5
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

$ sudo lvreduce --size -0.1G -r /dev/vol_group/logic2
Rounding size to boundary between physical extents: 100.00 MiB.
fsck from util-linux 2.31.1
/dev/mapper/vol_group-logic2: clean, 11/78936 files, 20232/315392
blocks resize2fs 1.44.1 (24-Mar-2018)
Resizing the filesystem on /dev/mapper/vol_group-logic2 to 212992 (1k)
blocks.
The filesystem on /dev/mapper/vol_group-logic2 is now 212992 (1k) blocks
long.
Size of logical volume vol_group/logic2 changed from 308.00 MiB (77
extents) to 208.00 MiB (52 extents).
Logical volume vol_group/logic2 successfully resized.



×