В некоторых случаях может потребоваться перенос пула устройств хранения данных с одного компьютера на другой. При этом устройства хранения требуется отключить от исходного компьютера и подключить к целевому компьютеру. Эта задачу можно решить путем повторного физического кабельного подключения устройств или при помощи многопортовых устройств, например, устройств в SAN. ZFS позволяет экспортировать пул из одного компьютера и импортировать его в целевой компьютер, даже если они имеют различный порядок следования байтов (endianness). Дополнительно о репликации или переходе файловых систем между разными пулами устройств хранения данных, которые могут находиться на разных компьютерах, см. Отправка и получение данных ZFS.
Определение доступных пулов устройств хранения данных для импорта
Поиск пулов устройств хранения данных ZFS в альтернативных каталогах
Восстановление уничтоженных пулов устройств хранения данных ZFS
Пулы устройств хранения данных должны быть явно экспортированы, что будет указывать на их готовность к переходу. Эта операция приводит к загрузке на диск всех незаписанных данных, записи данных на диск с указанием о том, что был выполнен экспорт, и удалению всех данных пула из системы.
Если пул явно не экспортирован, но вместо этого диски удалены вручную, этот пул также можно импортировать в другую систему. Однако при этом может потеряться несколько последних секунд транзакций данных, и в исходном компьютере пул будет отображаться как неисправный, поскольку соответствующие устройства отсутствуют. По умолчанию попытка импорта пула, который не был явно экспортирован, на целевом компьютере отклоняется. Это необходимо для предотвращения непреднамеренного импорта активного пула, состоящего из подключенного к сети устройства хранения, которое по-прежнему используется в другой системе.
Для экспорта пула используется команда zpool export. Пример:
# zpool export tank |
После выполнения этой команды пул tank больше не отображается в системе. Перед продолжением предпринимается попытка размонтирования всех смонтированных файловых систем в пуле. Если размонтировать какую-либо из файловых систем не удается, ее можно размонтировать принудительно с помощью параметра -f. Пример:
# zpool export tank cannot unmount '/export/home/eschrock': Device busy # zpool export -f tank |
Если во время экспорта устройства были недоступны, то диски не могут быть указаны как штатно экспортированные. При последующем подключении одного из этих устройств к системе без рабочих устройств это устройство отображается как "потенциально активное". Если в пуле используются тома ZFS, пул не может быть экспортирован даже при помощи параметра -f. Чтобы экспортировать пул с томом ZFS, сначала убедитесь, что все потребители тома не активны.
Для получения дополнительной информации о томах ZFS см. Тома ZFS.
После удаления пула из системы (путем экспорта или принудительного удаления устройств) необходимо присоединить устройства к целевой системе. Несмотря на то, что ZFS может разрешать некоторые ситуации, в которых доступна только часть устройств, переносить в новую систему следует все устройства пула. Эти устройства не обязательно должны присоединяться под прежним именем. ZFS обнаруживает любые перемещенные или переименованные устройства и корректирует настройки соответствующим образом. Для получения списка доступных пулов используется команда zpool import без каких-либо параметров. Пример:
# zpool import pool: tank id: 3778921145927357706 state: ONLINE action: The pool can be imported using its name or numeric identifier. config: tank ONLINE mirror ONLINE c1t0d0 ONLINE c1t1d0 ONLINE |
В этом примере пул tank доступен для импорта в целевую систему. Каждый пул идентифицируется по имени, а также по уникальному числовому идентификатору. Если несколько пулов, доступных для импорта, имеют совпадающие имена, то для их различия можно использовать цифровой идентификатор.
Подобно команде zpool status, команда zpool import содержит ссылку на статью базы знаний в Интернете с наиболее актуальной информацией о процедурах восстановления после устранения проблемы, возникшей при импорте пула. В этом случае пользователь может принудительно импортировать пул. Однако импорт пула, который в настоящее время используется другой системой в сети хранения данных, может привести к повреждению данных и возникновению фатальной ошибки, поскольку обе системы будут предпринимать попытки записи в одну и ту же область. Если определенные устройства в пуле недоступны, но для пула обеспечена достаточная избыточность, пул отображается в состоянии DEGRADED. Пример:
# zpool import pool: tank id: 3778921145927357706 state: DEGRADED status: One or more devices are missing from the system. action: The pool can be imported despite missing or damaged devices. The fault tolerance of the pool may be compromised if imported. see: http://www.sun.com/msg/ZFS-8000-2Q config: tank DEGRADED mirror DEGRADED c1t0d0 UNAVAIL cannot open c1t1d0 ONLINE |
В этом примере первый диск поврежден или отсутствует, однако импорт пула по-прежнему возможен, поскольку доступны зеркальные данные. При наличии слишком большого количества неисправных или отсутствующих устройств импорт пула невозможен. Пример:
# zpool import pool: dozer id: 12090808386336829175 state: FAULTED action: The pool cannot be imported. Attach the missing devices and try again. see: http://www.sun.com/msg/ZFS-8000-6X config: raidz FAULTED c1t0d0 ONLINE c1t1d0 FAULTED c1t2d0 ONLINE c1t3d0 FAULTED |
В этом примере в виртуальном устройстве RAID-Z отсутствуют два диска. Это означает, что избыточные данные, необходимые для восстановления пула, недоступны. В некоторых случаях отсутствует ряд устройств, необходимых для определения полной конфигурации. Поэтому ZFS не может определить, какие другие устройства входили в пул, несмотря на доступность максимального объема информации. Пример:
# zpool import pool: dozer id: 12090808386336829175 state: FAULTED status: One or more devices are missing from the system. action: The pool cannot be imported. Attach the missing devices and try again. see: http://www.sun.com/msg/ZFS-8000-6X config: dozer FAULTED missing device raidz ONLINE c1t0d0 ONLINE c1t1d0 ONLINE c1t2d0 ONLINE c1t3d0 ONLINE Additional devices are known to be part of this pool, though their exact configuration cannot be determined. |
По умолчанию команда zpool import позволяет выполнить поиск устройств только в каталоге /dev/dsk. При наличии устройств в другом каталоге или файловых пулов для их поиска следует использовать параметр -d. Пример:
# zpool create dozer mirror /file/a /file/b # zpool export dozer # zpool import -d /file pool: dozer id: 10952414725867935582 state: ONLINE action: The pool can be imported using its name or numeric identifier. config: dozer ONLINE mirror ONLINE /file/a ONLINE /file/b ONLINE # zpool import -d /file dozer |
Если устройства существуют в нескольких каталогах, можно указать несколько параметров - d.
После определения пула для импорта его можно импортировать, указав имя пула или его числовой идентификатор в качестве аргумента команды zpool import. Пример:
# zpool import tank |
Если нескольким доступным пулам присвоено одинаковое имя, пул для импорта можно указать с помощью числового идентификатора. Пример:
# zpool import pool: dozer id: 2704475622193776801 state: ONLINE action: The pool can be imported using its name or numeric identifier. config: dozer ONLINE c1t9d0 ONLINE pool: dozer id: 6223921996155991199 state: ONLINE action: The pool can be imported using its name or numeric identifier. config: dozer ONLINE c1t8d0 ONLINE # zpool import dozer cannot import 'dozer': more than one matching pool import by numeric ID instead # zpool import 6223921996155991199 |
В случае конфликта имени пула с именем существующего пула этот пул можно импортировать под другим именем. Пример:
# zpool import dozer zeepool |
Эта команда импортирует экспортированный пул dozer с использованием нового имени zeepool. Если пул не был экспортирован штатно, необходимо установить флаг -f для предотвращения случайного импорта пула, который по-прежнему используется другой системой. Пример:
# zpool import dozer cannot import 'dozer': pool may be in use on another system use '-f' to import anyway # zpool import -f dozer |
Пулы также можно импортировать с альтернативным корнем, указываемым при помощи параметра -R. Дополнительно о пулах с альтернативными корнями см. Использование пулов ZFS с альтернативным корнем.
Для восстановления уничтоженного пула устройств хранения данных используется команда zpool import -D. Пример:
# zpool destroy tank # zpool import -D pool: tank id: 3778921145927357706 state: ONLINE (DESTROYED) action: The pool can be imported using its name or numeric identifier. The pool was destroyed, but can be imported using the '-Df' flags. config: tank ONLINE mirror ONLINE c1t0d0 ONLINE c1t1d0 ONLINE |
В приведенных выше выходных данных команды zpool import пул можно идентифицировать как уничтоженный на основе следующей информации о состоянии:
state: ONLINE (DESTROYED) |
Для восстановления уничтоженного пула повторите команду zpool import -D для пула, который требуется восстановить. Пример:
# zpool import -D tank # zpool status tank pool: tank state: ONLINE scrub: none requested config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror ONLINE 0 0 0 c1t0d0 ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 errors: No known data errors |
Если одно из устройств в уничтоженном пуле неисправно или недоступно, уничтоженный пул тем не менее можно восстановить, используя параметр -f. В этом случае импортируется неисправный пул, а затем предпринимается попытка исправления ошибки устройства. Пример:
# zpool destroy dozer # zpool import -D pool: dozer id: state: DEGRADED (DESTROYED) status: One or more devices could not be opened. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Attach the missing device and online it using 'zpool online'. see: http://www.sun.com/msg/ZFS-8000-2Q scrub: resilver completed after 0h0m with 0 errors on Fri Aug 28 09:33:56 2009 config: NAME STATE READ WRITE CKSUM dozer DEGRADED 0 0 0 raidz2 DEGRADED 0 0 0 c2t8d0 ONLINE 0 0 0 c2t9d0 ONLINE 0 0 0 c2t10d0 ONLINE 0 0 0 c2t11d0 UNAVAIL 0 35 1 cannot open c2t12d0 ONLINE 0 0 0 errors: No known data errors # zpool import -Df dozer # zpool status -x pool: dozer state: DEGRADED status: One or more devices could not be opened. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Attach the missing device and online it using 'zpool online'. see: http://www.sun.com/msg/ZFS-8000-2Q scrub: resilver completed after 0h0m with 0 errors on Fri Aug 28 09:33:56 2009 config: NAME STATE READ WRITE CKSUM dozer DEGRADED 0 0 0 raidz2 DEGRADED 0 0 0 c2t8d0 ONLINE 0 0 0 c2t9d0 ONLINE 0 0 0 c2t10d0 ONLINE 0 0 0 c2t11d0 UNAVAIL 0 37 0 cannot open c2t12d0 ONLINE 0 0 0 errors: No known data errors # zpool online dozer c2t11d0 Bringing device c2t11d0 online # zpool status -x all pools are healthy |
При использовании пулов устройств хранения данных ZFS предыдущего выпуска Solaris, например выпуска Solaris 10 6/06, воспользоваться преимуществом функций обновления пула Solaris 10 11/06 можно с помощью команды zpool upgrade. Кроме того, измененная команда zpool status может проинформировать пользователя об использовании в пулах старых версий. Пример:
# zpool status pool: test state: ONLINE status: The pool is formatted using an older on-disk format. The pool can still be used, but some features are unavailable. action: Upgrade the pool using 'zpool upgrade'. Once this is done, the pool will no longer be accessible on older software versions. scrub: none requested config: NAME STATE READ WRITE CKSUM test ONLINE 0 0 0 c1t27d0 ONLINE 0 0 0 errors: No known data errors |
Для вывода дополнительной информации по определенной версии и поддерживаемым релизам используется следующий синтаксис.
# zpool upgrade -v This system is currently running ZFS version 3. The following versions are supported: VER DESCRIPTION --- -------------------------------------------------------- 1 Initial ZFS version 2 Ditto blocks (replicated metadata) 3 Hot spares and double parity RAID-Z For more information on a particular version, including supported releases, see: http://www.opensolaris.org/os/community/zfs/version/N Where 'N' is the version number. |
Затем для обновления пулов можно выполнить команду zpool upgrade. Пример:
# zpool upgrade -a |
При обновлении пула до новой версии ZFS пул будет недоступен в системе, использующей более старую версию ZFS.