Variable Store Full là gì?

Quicknote Variable Store Full là gì?

3 phút đọc
Đọc bằng Tiếng Việt English 日本語
Boot / NVRAM / Device Path Terms cover

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.
}
WRITE

OS/Firmware tạo boot entry mới

Ví dụ installer tạo Boot0007.

APPEND

Variable service append record

Flash thường ghi record mới thay vì overwrite trực tiếp record cũ.

FULL

Store hết chỗ usable

Có thể do dữ liệu thật nhiều hoặc do deleted records chưa reclaim.

FAIL

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

Nguồn tham khảo public

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.

Biến note thành bài viết hoàn chỉnh

Notes là nơi ghi nhanh khái niệm.