Tái tạo một phân vùng datastore VMFS thiếu trong VMware vSphere 5. x và 6. x (2046610)
Triệu chứng
- Một ngày đẹp trời cúp điện làm disk bị failed dẫn đến datastore đã không thể tiếp cận (Inaccessible)
- Một bảng phân vùng VMFS bị thiếu.
Mục đích
Bảng phân vùng được yêu cầu chỉ trong một Rescan. Điều này có nghĩa là rằng datastore có thể trở nên không truy nhập được trên một máy chủ trong một quét lại nếu VMFS phân vùng đã bị xoá sau khi Rescan cuối cùng. Bảng phân vùng được trên LUN, vì vậy tất cả các máy chủ vSphere có quyền truy cập vào LUN có thể thấy thay đổi đã diễn ra. Tuy nhiên, chỉ những máy chủ làm một quét lại sẽ bị ảnh hưởng.
Bài viết này cung cấp thông tin về:
- Xác định xem đây là cùng một vấn đề
- Giải quyết vấn đề
Gây ra
Sự cố này xảy ra do phân hoạch VMFS có thể bị Xoá datastore từ vSphere khách. Điều này được ngăn chặn bởi các phần mềm, nếu datastore đang được sử dụng. Nó cũng có thể xảy ra nếu một máy chủ vật lý có quyền truy cập vào Lun trên SAN và thực hiện một cài đặt, ví dụ. ngoài ra có thể bị cúp điện đột xuất, hư ổ cứng, mất raid,..
Giải quyết
Để khắc phục sự cố này:
Chạy lệnh partedUtil trên máy chủ với các vấn đề và xác minh nếu đầu ra của bạn tương tự như
# partedUtil getptbl/vmfs/Devices/disks/Naa.6006016045502500c20a2b3ccecfe011
Xác minh nếu đầu ra của lệnh là tương tự như:
gpt
52216 255 63 838860800
1 2048 838850039 AA31E02A400F11DB9590000C2911D1B8 vmfs 0
Nếu đầu ra của bạn xuất hiện tương tự như sau, nó cho biết phân vùng là Thiếu:
Gpt
52216 255 63 838860800
Trong trường hợp này, bạn phải tạo lại phân vùng. Để tạo lại phân vùng:
Tìm các khối bắt đầu và kết thúc của phân vùng VMFS. Để tìm sự khởi đầu của phân vùng, chạy lệnh này (một dòng lệnh) trên host:
# offset=”128 2048″; for dev in `esxcfg-scsidevs -l | grep “Console Device:” | awk {‘print $3’}`; do disk=$dev; echo $disk; partedUtil getptbl $disk; { for i in `echo $offset`; do echo “Checking offset found at $i:”; hexdump -n4 -s $((0x100000+(512*$i))) $disk; hexdump -n4 -s $((0x1300000+(512*$i))) $disk; hexdump -C -n 128 -s $((0x130001d + (512*$i))) $disk; done; } | grep -B 1 -A 5 d00d; echo “———————“; done
Lưu ý: các tập lệnh trước kiểm tra tất cả các thiết bị lưu trữ và danh sách có thể được kéo dài. Tập lệnh này không áp dụng cho đĩa cục bộ.
Bạn thấy kết quả tương tự như:
/vmfs/Devices/disks/Naa.60060160455025009839a9ed4cfee011
msdos
78325 255 63 1258291200
1 128 1258291124 251 0
Checking offset found at 128:
0110000 d00d c001
0110004
1310000 f15e 2fab
1310004
0131001d 46 43 5f 53 68 61 72 65 64 00 45 76 65 72 5f 47 |old_VMFS3…….|
0131002d 65 74 74 69 6e 67 5f 55 70 00 00 00 00 00 00 00 |…………….|
———————
/vmfs/devices/disks/naa.6006016045502500c20a2b3ccecfe011
gpt
52216 255 63 838860800
Checking offset found at 2048:
0200000 d00d c001
0200004
1400000 f15e 2fab
1400004
0140001d 4a 55 50 48 41 4d 5f 53 52 4d 35 00 00 00 00 00 |new_VMFS5…….|
0140002d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |…………….|
———————
Đầu ra trước có hai thiết bị lưu trữ ví dụ. Ví dụ đầu tiên được tạo trên máy chủ ESXi trước phiên bản 5 và báo cáo:
kiểm tra offset tìm thấy tại 128.
Trong đó 128 là khối bắt đầu.
Thiết bị lưu trữ thứ hai được tạo trên vSphere 5 hoặc mới hơn và báo cáo:
Checking offset found at 2048.
Chú thích: trong ví dụ này, bạn đang sử dụng thiết bị thứ hai, vì vậy đầu phân vùng là 2048.
2. Để có được khối kết thúc cho phân vùng, chạy lệnh này:
#partedUtil getUsableSectors /vmfs/Devices/disks/Naa.6006016045502500c20a2b3ccecfe011
bạn thấy kết quả này:
34 838860766
Chi chú
- Nếu bạn không thấy kết quả này và bạn nhận được một bảng phân vùng không xác định trên lỗi đĩa, chạy lệnh này để nhãn bảng như một bảng phân vùng GPT:
# partedUtil mklabel/vmfs/Devices/disks/Naa.6006016045502500c20a2b3ccecfe011 GPT
Chạy lại lệnh partedUtil getUsableSectors. Nếu bạn không nhận được dự kiến đầu ra của 2 số, chạy các loại phân vùng nhận dạng lệnh trong bullet tiếp theo cũng có.
Nếu bạn không thấy kết quả đã chỉ định và nhận được thông báo lỗi nêu rõ phân vùng bảng không hợp lệ, không thể đáp ứng tất cả các hạn chế về phân vùng hoặc lỗi tương tự, chạy lệnh này:
# partedUtil setptbl/vmfs/Devices/disks/Naa.6006016045502500c20a2b3ccecfe011 GPT "1 2048 4123456 AA31E02A400F11DB9590000C2911D1B8 0"
2. Điều này tạo ra một phân vùng tạm thời. Bây giờ bạn có thể đọc thông tin đĩa. Bây giờ bạn sẽ thấy kết quả chính xác. Bây giờ bạn có thể tính toán đúng khối cuối cùng sử dụng được.
Loại phân vùng xác định mục đích của một phân vùng và có thể được thể hiện bằng một số nhận dạng thập phân (ví dụ: 251) hoặc GUID (ví dụ: AA31E02A400F11DB9590000C2911D1B8). Phân vùng tạo ra trên ESXi 5. x và cao hơn với GPT đĩa phải được xác định bằng cách sử dụng GUID.
3. Chạy lệnh này để tạm thời tắt lưu trữ IO kiểm soát:
#/etc/init.d/storageRM stop
4. Chạy lệnh này để đặt các giá trị chính xác cho bảng phân vùng:
lưu ý: đảm bảo sử dụng các giá trị phù hợp trong lệnh này tùy thuộc vào môi trường của bạn.
# partedUtil setptbl/vmfs/Devices/disks/Naa.6006016045502500c20a2b3ccecfe011 GPT "1 2048 838860766 AA31E02A400F11DB9590000C2911D1B8 0"
Số trong màu đỏ cho biết khối cuối có thể sử dụng, do đó, kết thúc của phân vùng không thể cao hơn. Không biết liệu đây có phải là số được sử dụng khi datastore được tạo ra hay không, vì vậy bạn có thể thử nó và điều chỉnh nếu cần thiết.
5. Chạy lệnh này để cố gắng mount các datastore VMFS:
# vmkfstools -V
chú ý: nếu các datastore gắn kết, các con số là chính xác và bạn không cần phải điều chỉnh giá trị.
Nếu datastore không gắn kết, bạn có thể thấy thông báo trong thư mục /var/log/vmkernel.log tương tự như:… CPU0:44828) LVM: 2891: [naa.6006016045502500c20a2b3ccecfe011:1] thiết bị mở rộng (kích thước thực 838858719 khối, kích thước lưu trữ 838847992 khối)
Trong trường hợp này, thêm giá trị bù trừ một, để kích thước lưu trữ để có được khối kết thúc thực tế.
Ví dụ: 838847992 + 2047 = 838850039
chạy lệnh với giá trị cuối cùng mới:
# partedUtil setptbl/vmfs/Devices/disks/Naa.6006016045502500c20a2b3ccecfe011 GPT "1 2048 838850039 AA31E02A400F11DB9590000C2911D1B8 0"
Bây giờ bạn có phân vùng chính xác. Chạy vmfs quét lại một lần nữa:
# vmkfstools-V
- Chạy lệnh này để tạm thời tắt kiểm soát IO lưu trữ:
#/etc/init.d/storageRM start
Sau khi datastore được đặt trên một máy chủ, bạn có thể có cùng một lệnh vmfs quét lại sẽ gắn vmfs datastore khi chạy trên máy chủ khác có quyền truy cập vào Luân này.
Ngoài ra, bạn có thể chạy một cụm quét lại từ vCenter Server bằng cách sử dụng vSphere khách.