Я не знаю о стандартной утилите Linux, которая может сделать это. Если бы файл поместился бы в Ваш основанный на памяти кэш, это не было бы настолько неэффективно, чтобы сначала сделать md5sum и затем скопировать (копия получит данные из памяти).
Можно использовать следующую комбинацию:
cat filename | tee remote_output_name | md5sum
который Вы смогли исправлять для прямой проверки суммы, распечатанной md5sum
против сохраненного md5. Это читает файл из диска только однажды.
Принятие Вас генерировало a check.md5
с
cd dir_with_big_files
md5sum * > check.md5
, следующая программа Python сделала бы копирование и проверку единственный файл, читающий/пишущий в 64 МБ за один раз. Сохраните его как/usr/local/bin/chkcopy, chmod +x /usr/local/chkcopy
и назовите его с chkcopy file_name check.md5 destination_filename_or_dir
#! /usr/bin/env python
import sys, os, hashlib
m = hashlib.md5()
file_name = sys.argv[1]
md5_name = sys.argv[2]
out_name = sys.argv[3]
if os.path.isdir(out_name):
out_name = os.path.join(out_name, file_name)
BUF_SIZE = 64 * (1024 ** 2)
with open(file_name, 'rb') as ifp:
with open(out_name, 'wb') as ofp:
buf = ifp.read(BUF_SIZE)
while buf:
m.update(buf)
ofp.write(buf)
buf = ifp.read(BUF_SIZE)
with open(md5_name) as fp:
for line in fp:
md5, fn = line.rstrip().split(' ', 1)
if fn == file_name:
assert m.hexdigest() == md5
break
else:
print('no md5 found for ' + file_name)
Я решил эту проблему и хотел опубликовать ответ здесь, если у кого-то еще есть такие же трудности, поскольку документация на веб-сайте Oracle является неполной.
Нам нужно открыть порт для сервиса Mountd. Для этого выпустите следующие команды:
firewall-cmd --permanent --zone=<zone> --add-service mountd
Обязательно введите имя зоны. Моя была «публичная», но у вас также есть возможность выйти из этого, и он выберет зону по умолчанию.
Эта часть отсутствовала от документации Oracle. Однажды я сделал это, я смог подключить свой IMAC для своих NFS доля без проблем.