Руководство по администрированию файловых систем ZFS Solaris

Переход пулов устройств хранения данных ZFS

В некоторых случаях может потребоваться перенос пула устройств хранения данных с одного компьютера на другой. При этом устройства хранения требуется отключить от исходного компьютера и подключить к целевому компьютеру. Эта задачу можно решить путем повторного физического кабельного подключения устройств или при помощи многопортовых устройств, например, устройств в 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.

Поиск пулов устройств хранения данных ZFS в альтернативных каталогах

По умолчанию команда 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.

Импорт пулов устройств хранения данных ZFS

После определения пула для импорта его можно импортировать, указав имя пула или его числовой идентификатор в качестве аргумента команды 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 с альтернативным корнем.

Восстановление уничтоженных пулов устройств хранения данных 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

При использовании пулов устройств хранения данных 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.