bcache: error reading superblock — Восстановление кэша bcache в Linux
Архитектура ошибки и симптомы сбоя
Сообщение «bcache: error reading superblock on caching device» регистрируется драйвером ядра bcache (подсистема гибридного кэширования блочных устройств SSD -> HDD). Ошибка указывает на то, что ядро не смогло прочитать, десериализовать или верифицировать контрольную сумму суперблока (Superblock Magic: c68573f6...) на кэширующем SSD (Cache Device) или основном HDD (Backing Device). В результате устройство bcache не регистрируется в /dev/bcacheN, а данные становятся недоступными.
Диагностическая таблица параметров сбоя
| Параметр | Значение | Инженерный смысл сбоя |
|---|---|---|
| bcache Superblock | Offset 8.5 KB (Sector 17) | Служебная структура, содержащая UUID набора (Set UUID), роль диска и режим кэша. |
| Cache Device (SSD) | Fast Tier | Быстрый накопитель, хранящий чистые и «грязные» (dirty) кэш-блоки. |
| Backing Device (HDD) | Slow Tier | Основное блочное хранилище с постоянными данными. |
Пошаговое дерево решений и сценарии траблшутинга
Сценарий 1: Проверка наличия суперблока bcache через утилиту bcache-super-show
# Установка пакета утилит bcache-tools:
sudo apt-get install bcache-tools || sudo dnf install bcache-tools
# Чтение метаданных суперблока со сбойного SSD накопителя:
sudo bcache-super-show /dev/nvme0n1p1
# Просмотр суперблока основного диска:
sudo bcache-super-show /dev/sda1Сценарий 2: Принудительная ручная регистрация bcache устройства
Если суперблок цел, но система udev не зарегистрировала устройство при старте:
# Принудительная передача блочного устройства ядру:
echo /dev/nvme0n1p1 | sudo tee /sys/fs/bcache/register
echo /dev/sda1 | sudo tee /sys/fs/bcache/registerСценарий 3: Аварийный перевод backing-диска в автономный режим (Detached / Passthrough)
Если кэширующий SSD вышел из строя (аппаратная смерть флеш-памяти), отвяжите backing-диск от мертвого кэша:
# Остановка кэш-сета по Set-UUID (из bcache-super-show):
echo 1 | sudo tee /sys/fs/bcache/<CACHE_SET_UUID>/stop
# Принудительный запуск backing-диска без SSD кэша:
echo 1 | sudo tee /sys/block/sda/sda1/bcache/runningСценарий 4: Полная пересоздание пула кэширования bcache
# Очистка старых сигнатур суперблока:
sudo wipefs -a /dev/nvme0n1p1
# Создание нового Cache Device:
sudo make-bcache -C /dev/nvme0n1p1
# Привязка нового кэша к существующему bcache0 устройству:
echo <NEW_CACHESET_UUID> | sudo tee /sys/block/bcache0/bcache/attachITSTM выполнит извлечение dirty-блоков с поврежденных SSD, ручную реконструкцию суперблоков bcache и сохранит целостность файловых систем.
Частые вопросы (FAQ)
Что происходит с данными в режиме writeback, если SSD кэш физически сгорел?
В режиме writeback новые данные сначала записываются только на быстрый SSD (грязные блоки) и лишь потом сбрасываются на HDD. Если SSD полностью уничтожен до завершения flush, часть свежих данных файловой системы будет безвозвратно утрачена.
Где расположен суперблок bcache на диске?
Суперблок bcache жестко зафиксирован со смещением 8.5 КБ от начала раздела (сектор 17 при размере сектора 512 байт). Это позволяет ядру определять устройства bcache независимо от таблицы разделов.
Чем режим writethrough отличается от writeback в bcache?
В режиме writethrough данные одновременно пишутся и на SSD, и на HDD. Этот режим на 100% безопасен при отказе SSD (нет риска потери данных), но скорость записи ограничена производительностью медленного HDD.
Как узнать объем не сброшенных 'грязных' данных (dirty data)?
Выполните команду: cat /sys/block/bcache0/bcache/dirty_data. Значение покажет объем данных, ожидающих записи на HDD.