Вопрос или проблема
Я использую btrfs вместе с bcache. Он кэширует небольшие чтения, и это отлично работает.
Однако при выполнении проверки btrfs я хотел бы, чтобы эти чтения прошли на основные устройства, потому что их содержимое является исходной правдой; то, что я хочу проверить.
Один из способов достичь этого — отключить отдельные устройства bcache, но это обязательно также отключает состояние bcache, что означает, что оно теряется. Придется каждый раз восстанавливать кэш при проведении проверки.
Можно ли как-то достичь этого, не теряя кэш? Я хочу, чтобы bcache продолжал отслеживать все свои обычные состояния; обновлять и аннулировать кэш. Однако, когда дело доходит до использования кэша, он должен просто читать напрямую с основных дисков и игнорировать любые кэшированные данные.
Недавно я также наткнулся на это, и, похоже, достаточно отключить кэширование, записав “none” в файлы sysfs основных устройств по адресу “/sys/fs/bache/BCACHE_UUID/bdev*/cache_mode”.
Я протестировал результаты с помощью netdata. После отключения режима кэширования больше не засчитывались Hits кэша. Так что я предполагаю, что кэш был отключен после этого.
Должно быть безопасно делать это на активном устройстве bcache.
Ответ или решение
Временное отключение чтения кэша bcache для выполнения сканирования btrfs: Полное руководство
В ситуации, когда у вас настроен файловая система Btrfs поверх bcache и вы хотите запустить процесс проверки данных (scrub), важно минимизировать доступ к кэшу для получения достоверной информации о данных на задних устройствах. Scrub проверяет целостность данных, и для этого лучше всего пойти напрямую к исходным данным, а не использовать потенциально устаревшие кэшированные версии.
Проблема
При выполнении scrub Btrfs система пытается получить данные, которые кэшируются в bcache. Это может привести к тому, что вы проверяете кэшированные данные вместо оригинальных данных на задних устройствах. Отключение kэша bcache непосредственно может привести к потере состояния кэша, что нежелательно, так как вам не нужно каждый раз восстанавливать кэш после выполнения scrub.
Решение
Для временного отключения кэширования в bcache и выполнения scrub вы можете использовать переменные, доступные в файловой системе sysfs, для изменения режима работы, не теряя информации о состоянии кэша.
Шаги для отключения кэша
-
Определите UUID вашего кэша bcache:
Вам нужно найти UUID вашего устройства, чтобы выполнить дальнейшие действия. Вы можете использовать командуlsblk
для просмотра подключенных устройств и их UUID.lsblk -o UUID,NAME,MOUNTPOINT
-
Измените режим кэширования для устройств хранения:
Для каждого из ваших устройств вы можете изменить режим кэширования, выставив его в "none".Для этого выполните следующие команды:
echo none > /sys/fs/bcache/BCACHE_UUID/bdev*/cache_mode
Убедитесь, что заменили
BCACHE_UUID
на соответствующий UUID вашего устройства. -
Проверка результата:
После отключения кэша проверьте метрики кэширования с помощью инструментов мониторинга, таких как Netdata. Вам нужно убедиться, что кэш-попадания больше не отображаются:netdata
-
Запустите scrub:
Теперь, когда кэширование отключено, запустите процесс проверки данных Btrfs с помощью команды:btrfs scrub start /mnt/your_btrfs_mount_point
-
Восстановление режима кэширования:
После завершения scrub вы можете вернуть кэширование обратно в прежний режим, выполнив:echo writeback > /sys/fs/bcache/BCACHE_UUID/bdev*/cache_mode
Итог
Таким образом, вы можете временно отключить кэширование в bcache во время выполнения проверки (scrub) для Btrfs без потери состояния кэша. Этот подход позволяет сохранить целостность данных и гарантировать, что вы работаете с самой свежей и надежной информацией с задних устройств.
Помните, что любые изменения файловой системы и конфигураций должны проводиться с учетом рисков, поэтому всегда рекомендуется перед выполнением операций делать резервные копии данных.