Начиная с версии 5.0 ядра Linux, существует код для определения, какая часть зеркального массива будет использоваться. Для выбора одной из доступных полос используется pid процесса:
https://elixir.bootlin.com/linux/v5.0/source/fs/btrfs/volumes.c
static int find_live_mirror(struct btrfs_fs_info *fs_info, ...
{ ...
if (map->type & BTRFS_BLOCK_GROUP_RAID10)
num_stripes = map->sub_stripes;
else
num_stripes = map->num_stripes;
preferred_mirror = first + current->pid % num_stripes;
Существует дополнительная логика для изменения предпочтения, когда замена данных активна. Но текущий код не имеет «SSD» над «вращательной» логикой выбора.
Тимофей Титовец предложил патч для реализации поиска ssd, чтобы использовать его по своему усмотрению в 2017 и 2018 годах, но он все еще не принят:
Btrfs: enchanse raid1 / 10 эвристика баланса для невращающихся устройств
Тимофей Титовец. Ср, 27 декабря 2017
В настоящее время запросы балансировки btrfs raid1 / 10 балансировки к зеркалам,
на основе pid% числа зеркал. ...
Если одно из зеркал не вращается, тогда все запросы на чтение будут перемещены на не вращающееся устройство. ...
P.S. Вдохновленный балансировкой чтения md-raid1
https://www.spinics.net/lists/linux-btrfs/msg80033.html
[PATCH V5] Btrfs: эвристический баланс enchanse raid1 / 10, 7 июля 2018
https://patchwork.kernel.org/patch/10681671/
[V8] Btrfs: улучшение эвристики баланса raid1 / 10, 14 ноября 2018