%20%D0%B4%D0%B2%D0%B0%20%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%20%D0%B2%20%D0%BE%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9%20%D1%81%D1%80%D0%B5%D0%B4%D0%B5.png)
Допустим, у меня есть два устройства флэш-памяти емкостью 1 ГБ каждое. Допустим, что каждое устройство содержит один большой файл размером ~ 1 ГБ. Предположим, что у меня ограниченный объем оперативной памяти (64 МБ) и нет жесткого диска,каков кратчайший способ поменять местами эти два файла?
Я имею в виду: если файл a
находится на устройстве A
и b
находится на устройстве B
, я хочу, чтобы операция подкачки была помещена a
на B
и b
на A
.
Я знаю, что нет точного инструмента для Linux, который бы это сделал.это обсуждение.
Мне интересен кратчайший путь к достижению моей цели. Если этот путь будет слишком длинным, мне, вероятно, придется реализовать свое собственное специализированное решение, которое будет выполнять подкачку по частям, я прав?
решение1
Пока оба диска заполнены или почти заполнены, я сомневаюсь, что есть красивое решение. Хотя, должно быть, можно зациклить команды dd. Что-то вроде
#This code is completely untested,
#do NOT just copy paste and use it without proper testing
while [[ $((i*chunkSize)) -lt fileSize ]]; do
dd skip=$i seek=$i bs=$chunkSize count=1 if=fileA of=tmpFileInMemory
dd skip=$i seek=$i bs=$chunkSize count=1 if=fileB of=FileA
dd skip=$i seek=$i bs=$chunkSize count=1 if=tmpFileInMemory of=fileB
done
Некоторые проверки необходимы в случае, когда файлы A и B имеют разные размеры.