Як змонтувати зовнішню файлову систему ZFS без розблокування / зміни поточного чи зовнішньої файлової системи


11

Я використовую FreeBSD 10.2, використовуючи ZFS в корені як файлову систему (zroot01) . У мене зовнішній жорсткий диск з файловою системою ZFS з іншої системи FreeBSD 10.2 (zroot02), яку я хочу тимчасово змонтувати, лише читати, щоб я міг зняти з неї деякі файли, а потім відключити її. Я не хочу, щоб зовнішня система ZFS перешкоджала або замінювала мою поточну файлову систему, а також не хочу, щоб дані на зовнішній стороні були пошкоджені / змінені.

Щоб продемонструвати те, що я намагаюся досягти, якби я використовував UFS, я зробив щось подібне:

mount -t ufs -o ro /dev/ada0s2 /mnt/my-fun-mountpoint

... де /dev/ada0s2знаходиться розділ на моєму зовнішньому диску і /mnt/my-fun-mountpointзнаходиться в /mntкаталозі моєї існуючої операційної системи.

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

Чи можете ви надати чіткі вказівки, як це зробити? Заздалегідь дякую за допомогу.

Відповіді:


13

Ну, це дійсно залежить від того, наскільки ви хочете басейну бути лише для читання. І ні, це не жарт.

По-перше, трохи термінології: в ZFS ви імпортуєте пул і необов'язково монтуєте в ньому (будь-які) файлові системи. Ви можете імпортувати пул, не монтуючи жодної файлової системи, перейшовши -Nдо zpool importта потім змонтуйте будь-яку потрібну файлову систему за допомогою zfs mount. (Це цілком вірний сценарій, якщо, наприклад, ви хочете отримати доступ до лише однієї файлової системи з багатьох, або якщо ви хочете зробити щось, що нагадує офлайн-скраб пулу.)

ZFS не є великим шанувальником дійсного доступу лише для читання. Наприклад, якщо ZFS виявить помилку, яку він може виправити, я вважаю, що вона виправить помилку і запише відремонтовані дані на диск, навіть якщо ви імпортували пул як лише для читання. Я розумію, що у пакеті ZFS "лише для читання" стосується лише видимого користувачем стану пулу та його наборів даних. Якщо, з іншого боку, ви зробите двійкову копію диска у файл (або набір файлів), зробіть ці файли справді лише для читання та спробуйте імпортувати пул звідти, ZFS не зможе імпортувати імпорт басейн взагалі, як би ви не старалися. Якщо ви зробите файли для запису, вони будуть добре працювати. (Я насправді пробував це лише кілька тижнів тому, хоч і використовував zvol, і ZFS жорстоко відмовлявсяімпортувати пул. Коли я встановлюю zvol для читання / запису замість лише для читання, пул імпортує чудово.) Інші файлові системи, як-от (на Linux) ext4 та, ймовірно, інші вирішують цю ситуацію дещо витончено, але ZFS баксує.

Якщо вам не пощастило і у вас не встановлена ​​оперативна пам’ять ECC в системі, куди ви імпортуєте пул, спроба ZFS виправити будь-які помилки, з якими вона стикається, може насправді погіршити ситуацію , хоча думки відрізняються від того, чи є це насправді реальним ризиком на практиці. Особисто я вважаю, що будь-які дані, які мені достатньо цікаві для захисту за допомогою ZFS та знімків, надмірності та резервного копіювання на рівні пам’яті, і що не заслуговує на захист, пропонований оперативною пам’яттю ECC, але багато ПК не мають оперативної пам’яті ECC.

Отже, ви можете імпортувати пул у режимі лише для читання, із певним альтернативним коренем, щоб він не наступав на будь-які інші пальці ніг, але потрібно пам’ятати, що це не обов’язково по - справжньому лише для читання у криміналістичному сенсі. (Це, однак, забезпечить, щоб ви випадково нічого не змінили в пулі.) Щоб здійснити імпорт лише для читання, вважаючи, що пул названий tankі що вузли (-и) пристрою є / доступні в /dev, використовувати команду типу:

# zpool import tank -d /dev -o readonly=on -R /mnt/someplace

Тут буде шукати /devвсе, що містить пул ZFS з назвою tank, імпортує його, тимчасово встановивши властивість пулу readonlyна on(що означає, що всі записи, ініційовані користувачем, будуть відхилені) та тимчасово встановити його altrootвластивість /mnt/someplace. (Ці значення властивості є "тимчасовими", оскільки вони не зберігаються на диску (дисках) як поточні значення властивостей, тому якщо ви експортуєте та повторно імпортуєте пул без них, ці значення повернуться до нормальних показників. Вони можуть можливо, буде записано в історію пулу, яку після імпортування пулу ви можете переглянутиzpool history tank якщо ви так схильні.) Після імпорту пулу ви побачите свої файли під / mnt / someplace і матимете нормальний доступ до них лише для читання, включаючи будь-які знімки, які вже зроблені на наборах даних у пулі.

З огляду на ваш приклад, я підозрюю, що ви будете використовувати щось за принципом:

# zpool import zroot02 -d /dev -o readonly=on -R /mnt/my-fun-mountpoint

Коли ви закінчите, не забудьте чисто експортувати пул:

# zpool export tank

чи, можливо,

# zpool export zroot02

Це дозволить відключити всі файлові системи та інші набори даних у пулі, змити всі буфери (настільки, наскільки в першу чергу потребує промивання), позначити пул як не імпортований на всіх складових пристроях та виконувати будь-які інші необхідні завдання з обслуговування, щоб забезпечити що пул можна безпечно перемістити до іншої системи та імпортувати туди пізніше.


1
Якщо ви дійсно впевнені, що те, що ви заявляєте в третьому абзаці, є правильним, це буде помилка при реалізації BSD ZFS. Імпорт лише для читання пулу ZFS був розроблений так, щоб він був справді лише для читання, тобто він ніколи не намагається записати чи виправити будь-які дані чи метадані, включаючи історію пулу. Дивіться arc.stillopensolaris.org/txt/PSARC_2010_306.txt
jlliagre

1
@jlliagre Я цілком впевнений, але це могло бути в контексті іншої реалізації ZFS. Я не розумію, чому вони відрізнятимуться в такому фундаментальному аспекті; Я вважаю, що всі реалізації з відкритим кодом ZFS мають значну кількість коду, який простежує свою лінію на Sun. Я просто можу створити для цього якесь тестувальне середовище і ткнутися на нього палицею, а потім подивіться, що відбувається, але пройде деякий час, перш ніж я можу присвятити час, щоб насправді це зробити.
CVn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.