Процесс замены диска может занять продолжительное время, в зависимости от его емкости и объема данных в пуле. Процесс переноса данных из одного устройства на другое называют переносом актуальных данных; для контроля этого процесса используется команда zpool status.
В традиционных файловых системах перенос актуальных данных выполняется на уровне блоков. Поскольку ZFS исключает искусственные слои диспетчера томов, перенос актуальных данных выполняется более универсальным и контролируемым образом. Эта функция имеет два основных преимущества:
ZFS выполняет перенос только минимального объема необходимых данных. В случае кратковременного отключения (в противоположность полной замене устройства) возможен перенос актуальных данных диска в течение нескольких минут или секунд, вместо переноса всего диска или усложнения процедуры за счет регистрации "грязных" зон, осуществляемой некоторыми диспетчерами томов. При замене всего диска процесс переноса актуальных данных занимает время, пропорциональное объему данных на диске. Для замены диска размером 500 ГБ могут потребоваться секунды, если только малая часть используемого пространства принадлежит пулу.
Процедура переноса актуальных данных безопасна и может быть прервана в любой момент. При отключении электропитания или перезагрузке системы процесс переноса актуальных данных запускается точно с момента прерывания без вмешательства пользователя.
Для контроля процесса переноса актуальных данных используется команда zpool status. Пример:
# zpool status tank pool: tank state: ONLINE status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scrub: resilver in progress for 0h2m, 16.43% done, 0h13m to go config: NAME STATE READ WRITE CKSUM tank DEGRADED 0 0 0 mirror DEGRADED 0 0 0 replacing DEGRADED 0 0 0 c1t0d0 ONLINE 0 0 0 c2t0d0 ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 |
В приведенном примере диск c1t0d0 заменяется диском c2t0d0. Это событие отражается в выходных данных запроса состояния как replacing, что означает выполняющуюся замену виртуального устройства в настройке. Это устройство не существует в действительности, и создать пул с использованием этого типа виртуального устройства невозможно. Цель использования этого устройства состоит только в отображении процесса переноса актуальных данных и точном определении заменяемого устройства.
Следует отметить, что любой пул, для которого в настоящее время выполняется перенос актуальных данных, переводится в состояние ONLINE или DEGRADED, так как не может обеспечить необходимый уровень избыточности до завершения процесса переноса. Чтобы свести к минимуму воздействие на систему, перенос актуальных данных выполняется максимально быстро, хотя системные операции ввода-вывода всегда имеют более низкий приоритет, чем ввод-вывод по запросу пользователя. После завершения переноса актуальных данных выполняется переход к новой полной конфигурации. Пример:
# zpool status tank pool: tank state: ONLINE scrub: resilver completed after 0h0m with 0 errors on Tue Sep 1 10:55:54 2009 config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror ONLINE 0 0 0 c2t0d0 ONLINE 0 0 0 c1t1d0 ONLINE 0 0 0 errors: No known data errors |
Пул снова переводится в состояние ONLINE, и исходный неисправный диск (c1t0d0) удаляется из конфигурации.