У меня есть экземпляр EC2 на 18 ГБ, который исчерпал пространство. Я хотел архивировать и передать файлы от сервера к локальному диску. Существует примерно 1%-е свободное пространство, остающееся на нем. Это означает, что я ничего не могу сжать на диске, потому что это продолжает давать мне zip I/O error: No space left on device
ошибка. Существует ли способ, которым я могу сжать все, не используя дополнительное дисковое пространство?
Можно дать команду, чтобы сжаться до stdout по ssh и перенаправить stdout локально в файл. Что-то как:
ssh user@host "tar c /mydir | gzip -f" > myarchive.tar.gz
Следующие инструменты доступны в Ubuntu, и я проверил это rsync
, gzip
и tar
также доступны в MacOS.
rsync
который может скопировать файлы и/или деревья каталогов локально и через сетьgzip
который сжимает единственные файлыtar
который может создать архив со многими файлами и деревьями каталогов и сжатием, если Вы указываете егоКаталог изменения с
cd path-to-source-directory
к каталогу, который Вы хотите сжать.
rsync
У меня нет физического доступа к серверу. Я всегда связываюсь через ssh. Я буду искать rsync.Спасибо.
rsync
мощный инструмент копии, и он имеет встроенную проверку, что передача корректна.
Это просто для использования rsync
, если у Вас есть Ubuntu в обоих концах соединения, и я проверил, что существует rsync
версия также в MacOS.
Мне нравится следующая командная строка где опция
-H
принимает жесткие ссылки во внимание (и избегает двойных передач/копий); при отсутствии жестких ссылок, необходимо удалить эту опцию.-a
'архив' делает копию, которая удовлетворяет резервному копированию или синхронизации-v
'подробный' создает вывод всех файлов, которые будут скопированы с -n
и все файлы, скопированные в реальном случае (без -n
)-n
делает это 'пробным прогоном', просто показав то, что это 'хочет сделать'
rsync -Havn source/ target
В Вашем случае источник находится в сервере, и Вы работаете через ssh
соединение. Так, в клиенте (Ваш компьютер Mac), выполненный
rsync -avn user-id@ip-address:/path-to-source-directory/ path-to-target-directory
Заметьте запаздывающую наклонную черту после исходного каталога.
Если это выглядит хорошим, можно позволить ему сделать передачу со следующей командой (удалите n
для 'пробного прогона')
rsync -av user-id@ip-address:/path-to-source-directory/ path-to-target-directory
После передачи можно сделать то, что Вы хотите с копией в целевом каталоге. Я думаю, что Вы хотите сжать его, и я предлагаю, чтобы Вы использовали tar
с этой целью и создайте tarball.
Если Вы не можете работать rsync
или gzip
или tar
в Вашей MacOS можно загрузить компьютер Mac от USB pendrive или диска DVD с Ubuntu, и запустить программы тот путь. (Совет загрузить компьютер от USB pendrive или диска DVD с Ubuntu применяется также к компьютеру с Windows.)
Можно прочитать встроенное руководство man rsync
, man gzip
и man tar
в Вашем LTS Ubuntu 16.04, и я уверен, что можно найти хорошие учебные руководства через Интернет.
gzip
Каталог изменения с cd path-to-source-directory
к каталогу, который Вы хотите сжать.
Сожмите единственные файлы с
gzip -c file > path-to-external-directory/file.gz
Каталог изменения туда, где Вы хотите извлечь файл и выполнить gunzip для распаковки
cd to-where-you-want-to-extract-the-files
gunzip -c path-to-external-directory/file.gz > file
tar
Каталог изменения с cd path-to-source-directory
к каталогу, который Вы хотите сжать.
Сожмите группу файлов к 'tarball', например
tar -cvzf path-to-external-directory/file.tar.gz file1 file2 file3
или если существует пространство достаточно в целевом разделе на внешнем диске для целого каталога
tar -cvzf path-to-external-directory/file.tar.gz .
Пространство и заключительная точка важны.
Можно 'изучить' файл tar с командой
tar -tvf path-to-external-directory/file.tar.gz
Извлеките сжатые файлы из tarball со следующими командами
cd to-where-you-want-to-extract-the-files
tar -xvf path-to-external-directory/file.tar.gz