Я создал разреженный файл с
truncate -s 4T image.img
в файловой системе ext4, которую я монтирую поверх NFS. Следующий тест показывает, что система имеет проблемы с распознаванием разреженных файлов: оба
cp --sparse=always /mnt/data_extension/a.img /tmp/a.img # where a.img is created the same way image.img is
rsync --sparse /mnt/data_extension/a.img /tmp/a.img
Это занимает много времени, и я никогда не позволяю ему закончить, так как команда больше, чем секунда, показывает, что разреженный файл не распознается как таковой, и копирование / перемещение дырок требует ввода-вывода, что не должно быть.
tar --sparse -c -v -f /tmp/a.tar /mnt/data_extension/a.img
Немедленно возвращается и выдает tar, который может быть необработанным, если a.img пуст, если я что-то напишу внутри (например, создаю поддельную файловую систему btrfs с помощью sudo mkfs.btrfs /mnt/data_extension/a.img
), он перестает работать, т.е. принимает навсегда, как команды выше.
Все хорошо работает в локальной целевой файловой системе ext4, т.е. копирование и перемещение демонстрационного изображения a.img
происходит за 1 секунду или намного меньше.
Когда я применяю вышеупомянутые команды к реальному изображению image.img
и watch du -h /local/image.img
размер 0 никогда не обновляется, но это должно произойти после того, как был записан первый байт.
информация о монтировании для /mnt/data_extension
:
$ mount | grep /mnt/data_extension
192.168.178.76:/volume1/data_extension on /mnt/data_extension type nfs (rw,addr=192.168.178.76)
Как я могу переместить / скопировать image.img
из NFS-монтирования в локальную файловую систему без необходимости чтения 4 ТБ ?!
РЕДАКТИРОВАТЬ: указание sparse-version=1.0
заставляет tar
работать на клиенте, но не на NFS (и cifs
которые я пробовал между тем с тем же поведением). Это позволяет, по крайней мере, сохранить разреженный файл на сервере и передать результат со стоимостью одного ненужного действия unntar на клиенте.