Удаленная копия LMDB


0

Я хочу перенести LMDB с моего локального компьютера на другой удаленный компьютер, но с размером файла есть некоторые странности. Согласно файловой системе, LMDB - это каталог, содержащий два файла: data.mdb и lock.mdb.

Вывод ls -altoh lmdbуказывает, что файл data.mdb имеет размер 4T, что соответствует параметру map_size, который я использовал для создания LMDB. Все это означает, что при открытии БД ОС будет отображать файл в памяти, предоставляя ему 4T виртуального пространства. Вывод du -hs lmdbуказывает, что lmdb занимает ~ 900 МБ диска, что согласуется с сообщением map_size python -mlmdb -e lmdb stat.

Когда я делаю локальную копию cp -r lmdb lmdb_copy, она работает как положено: копируется 900 МБ данных. То же самое, когда я делаю scp -r lmdb lmdb_copy2(используя scp для локального копирования).

Однако, когда я делаю удаленное копирование scp -r lmdb user@remotehost:~/lmdb_copy, scp пытается скопировать 4T данных, как указано индикатором выполнения. Я остановил scp после того, как 2 ГБ данных были переданы.

На удаленной машине 'lsи du2 ГБ как размер LMDB. python -mlmdb -e lmdb_copy statсообщает правильный размер 900 МБ и что все записи есть. Я подтвердил, что могу распечатать все ключи, и они верны.

С этим фоном у меня возникает вопрос: почему scp пытается скопировать все 4T размера карты памяти? В идеале, я хотел бы позволить scp делать свою работу в фоновом режиме, не убивая ее вручную.

Ответы:


1

Вы можете попробовать использовать rsync для копирования. Он говорит, что имеет дело с разреженными файлами. Что-то вроде

rsync --rsh=ssh --archive --sparse lmdb user@remotehost:~/lmdb_copy

Кроме того, и некоторое понимание того, почему scp работает локально, а не по сети, когда scp видит, что это локальное копирование, он просто передает запрос команде cp напрямую. Отслеживая системные вызовы команды scp, я поймал это, делая это

execve("/bin/sh", ["sh", "-c", "exec cp -r foo bah"], [/* 20 vars */])

Спасибо, я попробую это. Я обнаружил, что функция mdb_copy будет локально копировать lmdb, чтобы файл не был разреженным ( lsотображал правильный размер файла), чтобы scp работал как положено.
— waldol1

Хм, это работало лучше, но все еще не то, что я хочу. Передано чуть более 900 МБ (971 МБ) данных (как показано на ls / du на удаленном компьютере), но rsync все еще работал (и сообщал о нелепых скоростях передачи 1000 ГБ / с), даже несмотря на то, что размер файла на удаленном компьютере перестал расти.
— waldol1

rsync сообщил, что скорость передачи данных пытается показать вам чистую скорость, поэтому он будет высоким для разреженных файлов (так же, как для разделов «без изменений»). Ты позволил rsync закончить?
— Микель
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.