Jak można skopiować system plików dokładnie tak, jak jest?

10

Mam system plików dla programowanego urządzenia, które chciałbym wykonać dokładną kopię. Idealnie chciałbym, aby ta kopia była identyczna z folderem, z którego została skopiowana. Próbowałem użyć cp -r cp -ai rsync -azvPstarać się to osiągnąć. Każdy z nich powoduje powstanie folderu o innym rozmiarze (używającym du -s) i ostatecznie, mimo że moje urządzenie ucieka z oryginalnego folderu, nie będzie działać z folderu, który skopiowałem.

  • Co jest pomijane, że polecenia, których użyłem, nie uwzględniają?
  • Czy można zachować wszystko identycznie podczas kopiowania systemu plików / folderu? Jeśli tak, to jak miałbym to zrobić?

PS Umieściłem podobne pytania na StackOverflow, ale szybko zdałem sobie sprawę, że zadałem je w złej wymianie


Edycja: Może to nie być pomocne, ale bez względu na to, której metody używam skopiowanego katalogu, zawsze powoduje, że dany komputer przechodzi w jądro jądra z następującymi danymi wyjściowymi.

VFS: Nie można podłączyć root fs przez NFS, próbując wykonać dyskietkę. VFS: Nie można otworzyć urządzenia głównego „nfs” lub nieznanego bloku (2,0) Dołącz poprawną opcję rozruchową „root =”; tutaj są dostępne partycje: 1f00
64 mtdblock0 (sterownik?) 1f02 64 mtdblock2 (sterownik?) 1f04 2432 mtdblock4 (sterownik?) 1f05 128 mtdblock5 (sterownik?) 1f06 4352 mtdblock6 (sterownik?) 1f07 204928 mtdblock7 (sterownik?) 1f08 50304 mtdblock8 (sterownik?) 0800
8388608 sda driver: sd Kernel panic - brak synchronizacji: VFS: Nie można zamontować root fs na nieznanym bloku (2,0)

TopGunCoder
źródło
5
Różnica w duwynikach nie oznacza, że ​​zawartość nie jest taka sama.
Ignacio Vazquez-Abrams
Moje urządzenie nie chce się uruchomić przy użyciu skopiowanego katalogu. Biorę to za wskaźnik i zastanawiam się, co dokładnie robię źle, że skopiowany system plików nie jest traktowany tak samo
TopGunCoder,
Musisz dokładnie określić, co próbujesz zrobić. rsync -alub cp -awykonaj dokładne kopie katalogów, ale próbujesz skopiować dysk rozruchowy, musisz wykonać kilka czynności, aby to zrobić.
forcefsck
1
Jakie urządzenie? Jaki system plików? Jakiego rodzaju nośniki danych?
michas
1
Dla mnie brzmi to tak, jakbyś chciał użyć czegoś takiego jak dd if=/some/location of=/some/other/location bs=4Modczyt i zapis danych w obecnej postaci.

Odpowiedzi:

12

Ogólnie używam jednej z następujących alternatyw:

  • rsync -aHAX(dodaj v dla gadatliwości) upewnia się, że podczas kopiowania zachowasz jakąkolwiek strukturę linków i x-attrs w folderze docelowym. Nie zapomnij aoznacza archiwizowania i pozwala zachować czas, własność i uprawnienia już.
  • Prosty tar cvf(nie kompresuj, aby zaoszczędzić czas, po prostu zwiększ go) używam, jeśli pierwszy nie spełnia tego, czego potrzebuję z jakiegokolwiek powodu i nie mam czasu, ale zawsze próbuję pierwszego.

Aby sprawdzić, czy wszystko poszło zgodnie z planem, możesz uruchomić diff -r <folder1> <folder2>później, jeśli chcesz.

bayindirh
źródło
1
To załatwiło sprawę! Musiałem także upewnić się, że urządzenie, które uruchamiałem (przez NFS), było wyłączone i nie było w stanie uzyskać dostępu do systemu plików podczas kopiowania.
TopGunCoder,
1
Ach, klienci NFS z dostępem do odczytu i zapisu mogą czasem urozmaicić!
bayindirh
3
Nie spowoduje to skopiowania rzadkich plików bez opcji -S. To może być część du -sróżnicy. Kiedyś rsync -axXSAHwszystko kopiowałem. -X kopiuje tylko w systemie plików, a nie pliki montowane z innego systemu plików.
Victor Roetman,
Co z identyfikatorami -numeric?
0x2207
@ 0x2207 Przydaje się tylko, gdy użytkownik ma różne identyfikatory numeryczne w różnych systemach (np. Użytkownik hbayindir jest w obu systemach i ma UID 1000 w źródle i 1536 w miejscu docelowym). Nigdy nie musiałem korzystać z tej opcji, ponieważ muszę zachować prawdziwego właściciela, a nie UID i GID. Jeśli użytkownik nie jest obecny ani źródłowy, ani docelowy, identyfikator zastępczy jest używany jako rezerwowy.
bayindirh
4

Czytanie odpowiedzi w komentarzach wygląda na to, że prawdopodobnie próbujesz skopiować folder główny („Moje urządzenie nie uruchamia się przy użyciu skopiowanego katalogu”). W takim przypadku powinieneś zrobić kilka rzeczy.

$ cd /
$ mkdir backups

$ tar -cvpf /backups/fullbackup.tar --directory=/ --exclude=proc --exclude=sys \
     --exclude=dev/pts --exclude=backups .

Po skopiowaniu folderu głównego do nowego systemu konieczne będzie zaktualizowanie programu grub przed uruchomieniem.

$ grub-install --recheck /dev/sdX (Where X is the partition number)
$ update-grub
Jeight
źródło
+1 Myślę, że wskazówką jest komunikat o nieudanym rozruchu w PO i to rozwiązuje problem.
msw 18.10.13
Jak się okazuje, zadziałało coś bardzo podobnego do tego. Miałem do czynienia z systemem plików (FS) na moim komputerze, który musiałem skopiować. Wszystko zajęło był dla mnie tar cwtedy tar xto. Najważniejsze było, aby upewnić się, że moja maszyna jest wyłączona, ponieważ uruchamiałem ją za pomocą FS, który był lokalny dla mojej maszyny, ale zdalnie do urządzenia, które uruchamiałem (uruchamiałem urządzenie przez NFS)
TopGunCoder
grub-install: error: embedding is not possible, but this is required for cross-disk install.
Witalij Zdanevich
2

Możesz spróbować FSArchiver . Jest to następca podobnego obrazu, który jest obecnie nieobsługiwany. W przeszłości używałem zarówno partimage, jak i FSArchiver i oba działały dobrze. O ile mi wiadomo, oboje robią kopie systemu plików, który jest możliwie najbardziej identyczny z oryginałem. Myślę, że FSArchiver jest nieco potężniejszy niż partimage. Na przykład działa z ext4, a partimage nie. Zobacz tabelę porównawczą FSArchiver / partimage .

Faheem Mitha
źródło
2

Używanie dudo porównywania folderów jest z natury kłopotliwe. Jeśli chcesz naprawdę porównać 2 katalogi oparte wyłącznie na ich rozmiarach, użyj dunastępującego:

$ du -sh --apparent-size <dir>

Ten przełącznik zgłasza rzeczywisty rozmiar katalogów w stosunku do ilości miejsca na dysku, które zużywa przechowywane na fizycznym nośniku. Dyski są zorganizowane w bloki i pliki są zapisywane w tych blokach. Jeśli plik potrzebuje tylko BLOKU + 1 miejsca, zajmie 2 miejsca o wartości BLOKÓW, i to duzwykle zgłasza. Pamiętaj, że nazwa narzędzia to użycie dysku!

Biorąc pod uwagę, że masz do czynienia z czymś, co brzmi jak cały system plików, chciałbym użyć go dddo wykonania dokładnej kopii partycji, na której znajduje się katalog

$ dd if=/dev/sda1 of=/srv/boot.img

Następnie możesz użyć tego, boot.imgaby przywrócić partycję gdziekolwiek chcesz.

$ dd if=/srv/boot.img of=/dev/sdb1
slm
źródło
du zgłosi również rozmiar na dysku (więc rzadkie pliki i twarde łącza zajmują mniej miejsca). Na przykład du -sh /vardaje 21G, ale du -sh --apparent-size /vardaje 209G w moim systemie.
Victor Roetman
0

Zależy to trochę od tego, co rozumiesz przez „identyczny”.

  • Zwykłe robienie rsyncbyłoby w porządku. Czasami chcesz użyć, taraby spakować wszystko do pliku i wypakować go w innym miejscu.
  • Jeśli chcesz sklonować cały system plików, możesz użyć dddo skopiowania całego systemu plików.

Jeśli masz jakiś sposób na debugowanie urządzenia, spróbuj dowiedzieć się, jaki dokładnie jest problem, dlaczego obecnie nie działa.

michas
źródło