Дело в следующем:
у нас есть два сервера, удаленный сервер с ТОЛЬКО FTP-доступом и локальный сервер linux, где мы должны настроить сценарий для резервного копирования всей системы с помощью команды dd. Резервная копия должна быть сохранена на удаленном сервере.
Для этого мы смонтировали удаленный сервер как локальный диск в / mnt / remoteftp
Для монтирования ftp-сервера мы использовали curlftps: Как смонтировать удаленный узел каталога ftp локально в файловую систему linux
Для резервного копирования мы использовали dd:
Как использовать dd на всем диске, но без пустой части
Здесь мой сценарий
CT = $ (fdisk -l | awk '$ 1 == "/ dev / sda1" {print $ 3}')
dd if = / dev / sda1 bs = 512 count = $ CT | gzip | / mnt / remoteftp / ПУТЬ / sda _ $ (uname -r) .img.gz
Скрипт работает, но у меня проблема, потому что скрипт должен избегать пустого места, но результат другой, на самом деле
root@linuxserver:~/# df -h
Filesystem Size Used Avail Use% Mounted on
udev 961M 0 961M 0% /dev
tmpfs 195M 3,1M 192M 2% /run
/dev/sda1 20G 2,1G 18G 11% /
tmpfs 973M 0 973M 0% /dev/shm
tmpfs 5,0M 0 5,0M 0% /run/lock
tmpfs 973M 0 973M 0% /sys/fs/cgroup
/dev/sda15 105M 3,6M 101M 4% /boot/efi
tmpfs 195M 0 195M 0% /run/user/1001
curlftpfs#ftp://ftp.remotesrv.com/ 954G 0 954G 0% /mnt/remoteftp
На диске / dev / sda1 назначено только 2,1 ГБ, поэтому я ожидаю 3 файла, когда мой сценарий finish:
1 файл размером 1 ГБ, другой файл размером 1 ГБ и последний файл размером 100 МБ.
Вместо этого у меня
root@linuxserver:~/batch# ls -lah /mnt/remoteftp/
total 17G
drwxr-xr-x 2 ubuntu ubuntu 4,0K nov 20 2019 .
drwxr-xr-x 7 ubuntu ubuntu 4,0K nov 20 12:02 ..
-rwxr-xr-x 0 ubuntu ubuntu 13G nov 20 2019 .fuse_hidden0000007900000001
-rwxr-xr-x 1 ubuntu ubuntu 1000M nov 20 2019 sda_4.15.0-70-generic.img.gzaa
-rwxr-xr-x 1 ubuntu ubuntu 1000M nov 20 2019 sda_4.15.0-70-generic.img.gzab
-rwxr-xr-x 1 ubuntu ubuntu 1000M nov 20 2019 sda_4.15.0-70-generic.img.gzac
-rwxr-xr-x 1 ubuntu ubuntu 1000M nov 20 2019 sda_4.15.0-70-generic.img.gzad
-rwxr-xr-x 1 ubuntu ubuntu 326M nov 20 2019 sda_4.15.0-70-generic.img.gzae
root@linuxserver:~/batch# ls -lah /mnt/remoteftp/
total 17G
drwxr-xr-x 2 ubuntu ubuntu 4,0K nov 20 2019 .
drwxr-xr-x 7 ubuntu ubuntu 4,0K nov 20 12:02 ..
-rwxr-xr-x 0 ubuntu ubuntu 13G nov 20 2019 .fuse_hidden0000007900000001
-rwxr-xr-x 1 ubuntu ubuntu 1000M nov 20 2019 sda_4.15.0-70-generic.img.gzaa
-rwxr-xr-x 1 ubuntu ubuntu 1000M nov 20 2019 sda_4.15.0-70-generic.img.gzab
-rwxr-xr-x 1 ubuntu ubuntu 1000M nov 20 2019 sda_4.15.0-70-generic.img.gzac
-rwxr-xr-x 1 ubuntu ubuntu 1000M nov 20 2019 sda_4.15.0-70-generic.img.gzad
-rwxr-xr-x 1 ubuntu ubuntu 374M nov 20 2019 sda_4.15.0-70-generic.img.gzae
root@linuxserver:~/batch#
Почему такое поведение?
Когда Вы используете dd
, Вы копируете данные по блочному уровню. Раздел ничего не знает о файловой системе или что находится на нем.
, Если Вы копируете файл на 10 ГБ на сервере и удаляете его сразу же, Вы только удалите ссылки на него в файловой системе. Сами данные все еще будут там. Так, при копировании раздела впоследствии с dd
Вы скопируете этот 'фантомный' файл также.
Для получения результата Вы ожидаете, необходимо было бы на самом деле вытереть все неиспользуемое место на диске путем перезаписи его с другими данными, предпочтительно что-то, что легко сжато gzip. Обычно Вы делаете это путем перезаписи всего с обнуляет.
После этого, результат должен быть тем, что Вы ожидаете.
<час>Лично, я не выполнил бы резервное копирование на уровне блочного устройства. Я просто использовал бы существующий резервный инструмент, который на самом деле знает и использует файловую систему.