Як файлову систему можна скопіювати так само, як є?


10

У мене є файлова система для пристрою, я програмую, на якому хотілося б зробити точну копію. В ідеалі я хотів би, щоб ця копія була ідентичною папці, з якої вона була скопійована. Я спробував використовувати cp -r cp -aі rsync -azvPнамагатися цього досягти. Кожна з них створює папку з різним розміром (використовуючи du -s), і в кінцевому підсумку, незважаючи на те, що на моєму пристрої закінчується вихідна папка, вона не закінчиться тієї, яку я скопіював.

  • Що залишається поза тим, що команди, які я використав, не враховують?
  • Чи можливо зберегти все однакове під час копіювання файлової системи / папки? Якщо так, як би я пішов робити це?

PS Я розмістив подібні запитання на StackOverflow, але швидко зрозумів, що поставив його на неправильному обміні


Редагування: Це може бути не корисним, але незалежно від того, для якого методу я використовую скопійований каталог, завжди викликає розроблений апарат ядро ​​Panic з наступним висновком.

VFS: Неможливо встановити root fs через NFS, намагаючись дискети. VFS: Не вдається відкрити кореневий пристрій "nfs" або невідомий блок (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: Неможливо встановити root fs на невідомий блок (2,0)


5
Різниця у duвиході не є показником того, що вміст не однаковий.
Ігнасіо Васкес-Абрамс

Мій пристрій не завантажиться за допомогою скопійованого каталогу. Я сприймаю це як індикатор і цікавлюсь, що саме я роблю неправильно, що скопійована файлова система не трактується однаково
TopGunCoder

Вам потрібно вказати, що саме ви намагаєтеся зробити. rsync -aабо cp -aробити точні копії каталогів, але ви намагаєтесь скопіювати завантажувальний диск, вам потрібно зробити ще кілька речей, щоб виконати це.
forcefsck

1
Який пристрій? Яка файлова система? Що таке носій інформації?
michas

1
Мені це здається, що ти хочеш використовувати щось на кшталт того, dd if=/some/location of=/some/other/location bs=4Mщоб читати і записувати дані так, як є.

Відповіді:


12

Зазвичай я використовую одну з наступних альтернатив:

  • rsync -aHAX(додати v для багатослів’я) гарантує збереження будь-якої структури посилань та x-attrs у цільовій папці під час копіювання. Не забувайте, aзначить, архів і вже зберігає час, право власності та дозволи.
  • Просте tar cvf(не стискайте, щоб заощадити час, просто відстороніть їх) - це те, що я використовую, якщо перший з будь-якої причини не відповідає тому, що мені потрібно, і в мене немає часу, але я завжди намагаюся перший.

Щоб перевірити, що все пішло як слід, ви можете запустити diff -r <folder1> <folder2>згодом, якщо хочете.


1
Це зробило трюк! Мені просто потрібно було переконатися, що пристрій, який я завантажував (через NFS), було вимкнено та не змогло отримати доступ до файлової системи під час копіювання.
TopGunCoder

1
Ах, клієнти NFS з доступом до читання-запису іноді можуть приправити речі!
bayindirh

3
Це не буде копіювати над розрідженими файлами без -S. Це може бути частиною du -sрізниці. Я колись rsync -axXSAHкопіював все. Копія -x буде копіювати лише у файловій системі, а не файли, встановлені з іншої файлової системи.
Віктор Ротман

Що про - числові ідентифікатори?
0x2207

@ 0x2207 Корисно лише у випадку, коли користувач має різні числові ідентифікатори в різних системах (наприклад, hbayindir користувача є в обох системах і має UID 1000 у джерелі та 1536 у пункті призначення). Мені ніколи не довелося використовувати цей варіант, оскільки мені потрібно зберегти справжнього власника, а не UID та GID. Якщо у користувача немає ні джерела, ні місця призначення, числовий ідентифікатор використовується як резервний.
bayindirh

4

Читаючи свою відповідь у коментарях, це здається, що ви, можливо, намагаєтесь скопіювати кореневу папку ("Мій пристрій не завантажиться за допомогою скопійованого каталогу"). У цьому випадку вам слід зробити кілька речей.

$ 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

+1 Я думаю, що ключ є в повідомленні про невдале завантаження в ОП, і це вирішує його.
msw

Як виявляється, щось дуже схоже на це спрацювало. Я мав справу з файловою системою (FS) на своїй машині, яку мені потрібно було скопіювати. Все, що потрібно, було для мене tar cтоді tar x. Хоча кікер повинен був переконатися, що моя машина вимкнута, оскільки я завантажував її за допомогою FS, який був локальним для моєї машини, але віддаленим від пристрою, який я завантажував (я
запускав

grub-install: error: embedding is not possible, but this is required for cross-disk install.
Віталій Зданевич,

2

Ви можете спробувати FSArchiver . Він є спадкоємцем аналогічної частки, яка зараз не збереглася. У минулому я використовував як partimage, так і FSArchiver, і вони добре працювали. Наскільки мені відомо, вони обидва роблять копії файлової системи, максимально близької до оригіналу. Я думаю, що FSArchiver є дещо потужнішим за partimage. Наприклад, він працює з ext4, а partimage - ні. Дивіться таблицю порівняння FSArchiver / partimage .


2

Використовувати duдля порівняння папок суттєво проблематично. Якщо ви хочете по-справжньому порівняти 2 каталоги, виходячи виключно з їх розмірів, тоді використовуйте duтак:

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

Цей перемикач повідомляє про каталог, розмір якого є фактичним, порівняно з кількістю дискового простору, який він споживає при зберіганні на фізичному носії. Диски організовані в блоки і файли записуються в ці блоки. Якщо для файлу потрібен лише BLOCK + 1 місця, він займе 2 BLOCKS варті місця, і це duзазвичай те, що звітує. Запам'ятайте назву інструменту - використання диска!

З огляду на те, що ви маєте справу з тим, що звучить як ціла файлова система, я б схильний використати, ddщоб зробити точну копію розділу, на якому знаходиться каталог

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

Потім ви можете використовувати це boot.imgдля відновлення розділу де завгодно.

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

du також повідомить розмір на диску (тому розріджені файли та жорсткі посилання займають менше місця). Наприклад, du -sh /varдає 21G, але du -sh --apparent-size /varдає 209G в моїй системі.
Віктор Ротман

0

Це трохи залежить від того, що ви маєте на увазі під «тотожним».

  • Просто робити це rsyncбуло б чудово більшість часу. Іноді ви хочете використовувати, tarщоб запакувати все у файл і витягнути його в іншому місці.
  • Якщо ви хочете клонувати повну файлову систему, ви можете ddскопіювати всю файлову систему.

Якщо у вас є якийсь засіб налагодження пристрою, спробуйте з’ясувати, у чому саме полягає проблема, чому він наразі не вибігає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.