Variable Store Full là gì?
Quicknote Variable Store Full là gì?
Variable Store Full là tình trạng vùng lưu UEFI variable không còn đủ chỗ để ghi thêm record mới. Trên thực tế, nó không chỉ xảy ra khi “dữ liệu nhiều hơn dung lượng”; nó còn có thể xảy ra khi store bị fragmented, nhiều record cũ bị delete nhưng reclaim chưa chạy hoặc reclaim fail.
Triệu chứng thường gặp
- BIOS setup đổi setting nhưng không lưu được sau reboot.
SetVariable()trảEFI_OUT_OF_RESOURCES.- OS không tạo được boot entry mới.
- Boot option bị nhân đôi, stale, hoặc không xoá sạch.
- Secure Boot database update fail.
Status = gRT->SetVariable(
L"Boot0007",
&gEfiGlobalVariableGuid,
Attributes,
LoadOptionSize,
LoadOption
);
if (Status == EFI_OUT_OF_RESOURCES) {
// Không nên hiểu đơn giản là AllocatePool fail.
// Với variable, rất có thể variable store không còn chỗ/reclaim fail.
}
OS/Firmware tạo boot entry mới
Ví dụ installer tạo Boot0007.
Variable service append record
Flash thường ghi record mới thay vì overwrite trực tiếp record cũ.
Store hết chỗ usable
Có thể do dữ liệu thật nhiều hoặc do deleted records chưa reclaim.
SetVariable trả lỗi
Caller thấy EFI_OUT_OF_RESOURCES hoặc update không bền sau reboot.
Vì sao xoá variable chưa chắc giải phóng ngay?
Trong variable store, xoá một variable thường là đánh dấu record cũ là deleted. Flash erase phải theo block, nên không thể xoá lẻ từng record như file system bình thường. Vì vậy firmware cần reclaim/garbage collection để compact dữ liệu còn sống sang vùng sạch.
Trước reclaim:
[Boot0000 valid][Boot0001 deleted][Boot0002 valid][OldSetup deleted][NewSetup valid][free ít]
Sau reclaim:
[Boot0000 valid][Boot0002 valid][NewSetup valid][free nhiều hơn]
Ví dụ dump cần nghi ngờ
Boot0000* Windows Boot Manager ...
Boot0001* UEFI USB ...
Boot0002* ubuntu ...
Boot0003* ubuntu ...
Boot0004* ubuntu ...
Boot0005* ubuntu ...
BootOrder: 0000,0002,0003,0004,0005
Nếu một máy qua nhiều lần cài OS, đổi SSD, update BIOS mà không dọn boot entries, NVRAM có thể chứa nhiều boot option cũ. Chúng không phải lúc nào cũng gây full ngay, nhưng là dấu hiệu metadata boot đang bẩn.
Checklist xử lý store full
Góc nhìn firmware engineer
Một bug khá nguy hiểm là driver tự tạo variable mới ở mỗi boot với tên khác nhau, ví dụ kèm counter/timestamp. Máy test vài lần không sao, nhưng sau vài trăm lần reboot automation thì variable store đầy. Lỗi này nhìn ngoài giống “BIOS setup không lưu”, nhưng gốc là policy ghi variable thiếu kiểm soát.
Bài liên quan
- NVRAM là gì?
- UEFI Variable Store là gì?
- Variable Attribute là gì?
- Variable Store Full là gì?
- CMOS khác NVRAM như thế nào?
Nguồn tham khảo public
- UEFI Specification 2.11 - Runtime Services
- UEFI Specification 2.11 - Boot Manager
- EDK II VariableRuntimeDxe
Thấy nội dung này hữu ích?
Lưu lại hoặc chia sẻ cho người cũng đang học firmware, BIOS/UEFI và embedded systems.
Nội dung liên quan
Một số bài viết, ghi chú hoặc project có liên quan đến nội dung bạn vừa đọc.
Variable Attribute là gì?
Quicknote Variable Attribute là gì?
Runtime sau ExitBootServices là gì?
Giải thích firmware còn lại gì sau khi OS gọi ExitBootServices và vì sao Runtime Services vẫn quan trọng.
Runtime phase là gì?
Giải thích giai đoạn runtime sau ExitBootServices và vì sao UEFI Runtime Services vẫn còn quan trọng khi OS đã chạy.
Biến note thành bài viết hoàn chỉnh
Notes là nơi ghi nhanh khái niệm.