Я не знаю, как найти его с помощью команды ls
. Но если вы действительно этого хотите, вы можете использовать btrfs-progs / btrfs-debug-tree .
Если reflink = always , файлы будут совместно использовать общий блок данных. Этот общий блок данных (он же экстенты) имеет более 1.
Сначала вам нужно найти objectid для файлов один и два
#. / Btrfs-debug-tree / dev / xvdc
(Отметьте в разделе FS_TREE)
ключ элемента 8 (256 DIR_INDEX 4) itemoff 15842 itemsize 33
ключ местоположения (259 INODE_ITEM 0) тип FILE
namelen 3 datalen 0 name: один
item 9 key (256 DIR_INDEX 5) itemoff 15809 itemsize 33
location key (260 INODE_ITEM 0) type FILE
namelen 3 datalen 0 name: two { {1}}
Сверху мы видим его 259 (один) и 260 (два) .
Теперь найдите его ссылки. из дерева экстентов. Команда ниже найдет блок данных, совместно используемый двумя файлами.
# ./btrfs-debug-tree / dev / xvdc | grep -A2 "refs 2"
extension refs 2 gen 9 flags DATA
extension data backref root 5 objectid 260 offset 0 count 1
extension data backref root 5 objectid 259 offset 0 count 1
Бонус: Создайте еще одну ссылку:
# cp --reflink=always one three
убедитесь, что счетчик ссылок увеличивается на 1.
# ./btrfs-debug-tree /dev/xvdc | grep -A3 "refs 3"
extent refs 3 gen 9 flags DATA
extent data backref root 5 objectid 260 offset 0 count 1
extent data backref root 5 objectid 261 offset 0 count 1
extent data backref root 5 objectid 259 offset 0 count 1
Здесь блок данных разделяется между тремя файлами, на которые указывает objectid 259,260,261 .
Используемая вами команда dd
копирует не отдельные разделы, а весь /dev/sdc
, что не сработает, поскольку /dev/sdc
в ~в 4 раза больше /dev/sdb
..
Вам нужно создать разделы одинакового размера на /dev/sdb
, а затем использовать dd
или cat
для клонирования разделов по отдельности.
Убедитесь, что на /dev/sdb
нет смонтированных файловых систем. После создания разделов на/dev/sdb
:
dd if=/dev/sdc3 of=/dev/sdb3 bs=2M
dd if=/dev/sdc4 of=/dev/sdb4 bs=2M
Для лучшей (и более быстрой )производительности используйтеcat
:
cat /dev/sdc3 > /dev/sdb3
cat /dev/sdc4 > /dev/sdb4
И так далее и тому подобное.
Как правило, вы не можете клонировать диск большего размера на диск меньшего размера.
Но есть обходные пути.
Вы можете уменьшить (и, возможно, переместить )разделы на большом диске, чтобы все они находились в пределах меньшего диска (с небольшим объемом дискового пространства, зарезервированным для резервной копии таблицы разделов. в конце в случае таблицы разделов GUID, GPT ).
Имейте в виду, что если вы переместите головную часть загрузочного раздела (, корневой раздел может быть загрузочным разделом ), загрузчик должен быть переустановлен, чтобы найти его. Это возможно, но осложнение.
Затем вы можете клонировать эту часть большего диска, и, если это таблица разделов GUID, GPT, впоследствии исправить резервную копию таблицы разделов, например, с помощью gdisk
.
Я бы по-прежнему рекомендовал клонировать «весь» диск, от /dev/sdx
до /dev/sdy
, где x
— буква устройства исходного диска, а y
— буква устройства целевого диска. Клонирование с помощью dd
или подобных инструментов будет усечено, когда целевой диск будет заполнен.
Есть и другие вещи, которые могут создать проблемы. Несколько минут назад я написал список вещей, на которые следует обратить внимание, когда вы собираетесь клонировать диск. См. следующую ссылку Клонирование с одного диска на другой диск .