
У меня есть файловая система для программируемого мной устройства, точную копию которого я хотел бы сделать. В идеале я хотел бы, чтобы эта копия была идентична папке, из которой она была скопирована. Я пробовал использовать cp -r
cp -a
и , rsync -azvP
чтобы попытаться добиться этого. Однако каждый из них приводит к созданию папки разного размера (используя du -s
), и в конечном итоге, хотя мое устройство работает с исходной папки, оно не будет работать с той, которую я скопировал.
- Что упущено из виду и что не учтено в использованных мною командах?
- Можно ли сохранить все идентично при копировании файловой системы/папки? Если да, то как это сделать?
PS Я разместил похожий вопрос наПереполнение стекано быстро понял, что задал вопрос не на той бирже
Редактировать: Это может быть бесполезно, но независимо от того, какой метод я использую, скопированный каталог всегда приводит к тому, что на соответствующем компьютере происходит Kernel Panic со следующим выводом.
VFS: Невозможно смонтировать корневую файловую систему через NFS, пытаюсь использовать дискету. VFS: Невозможно открыть корневое устройство "nfs" или unknown-block(2,0) Добавьте правильный параметр загрузки "root="; вот доступные разделы: 1f00
64 mtdblock0 (драйвер?) 1f02 64 mtdblock2 (драйвер?) 1f04 2432 mtdblock4 (драйвер?) 1f05 128 mtdblock5 (драйвер?) 1f06 4352 mtdblock6 (драйвер?) 1f07 204928 mtdblock7 (драйвер?) 1f08 50304 mtdblock8 (драйвер?) 0800
8388608 sda драйвер: sd Паника ядра - не синхронизируется: VFS: Невозможно смонтировать корневую файловую систему на unknown-block(2,0)
решение1
Я обычно использую один из следующих вариантов:
rsync -aHAX
(добавьте v для многословности) гарантирует, что вы сохраните любую структуру ссылок и x-attrs в целевой папке при копировании. Не забывайте,a
что означает архив и уже сохраняет время, владельца и разрешения.- Простой
tar cvf
(не сжимать, чтобы сэкономить время, а просто заархивировать) — это то, что я использую, если первый вариант по какой-то причине не отвечает моим требованиям и у меня нет времени, но я всегда пробую первый вариант.
Чтобы убедиться, что все прошло как надо, вы можете запустить его diff -r <folder1> <folder2>
позже, если захотите.
решение2
Читая ваш ответ в комментариях, можно подумать, что вы, возможно, пытаетесь скопировать корневую папку («Мое устройство не загружается, используя скопированный каталог»). В этом случае есть несколько вещей, которые вам следует сделать.
$ cd /
$ mkdir backups
$ tar -cvpf /backups/fullbackup.tar --directory=/ --exclude=proc --exclude=sys \
--exclude=dev/pts --exclude=backups .
После копирования корневой папки в новую систему вам потребуется обновить grub, прежде чем она загрузится.
$ grub-install --recheck /dev/sdX (Where X is the partition number)
$ update-grub
решение3
Вы можете попробоватьFSArchiver. Это преемник похожего partimage, который сейчас не поддерживается. Я использовал и partimage, и FSArchiver в прошлом, и оба они работали хорошо. Насколько мне известно, они оба создают копии файловой системы, максимально приближенные к оригиналу. Я думаю, что FSArchiver немного мощнее partimage. Например, он работает с ext4, а partimage — нет. СмотритеСравнительная таблица FSArchiver/partimage.
решение4
Это немного зависит от того, что вы подразумеваете под словом «идентичный».
- Просто делать
rsync
было бы нормально большую часть времени. Иногда вы хотите использовать,tar
чтобы упаковать все в файл и извлечь его в другом месте. - Если вам нужен клон всей файловой системы, вы можете использовать
dd
для копирования всей файловой системы.
Если у вас есть возможность отладить свое устройство, постарайтесь выяснить, в чем именно заключается проблема, из-за которой оно в данный момент не запускается.