Existe um mecanismo de inicialização que permite ao FreeBSD montar pools do ZFS durante a inicialização do sistema. Para habilitá-lo, adicione esta linha ao /etc/rc.conf
:
zfs_enable="YES"
Então inicie o serviço:
#
service zfs start
Os exemplos nesta seção assumem três discos SCSI com os seguintes nomes de dispositivo
, da0
e da1
. Usuários de hardware do tipo SATA devem usar nomes de dispositivo da2
.ada
Para criar um pool simples e não-redundante usando um único disco:
#
zpool create
example
/dev/da0
Para visualizar o novo pool, verifique a saída do comando df
:
#
df
Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ad0s1a 2026030 235230 1628718 13% / devfs 1 1 0 100% /dev /dev/ad0s1d 54098308 1032846 48737598 2% /usr example 17547136 0 17547136 0% /example
Esta saída mostra que o pool example
foi criado e montado e agora está acessível como um sistema de arquivos. Arquivos podem ser criados nele e os usuários podem navegar nele:
#
cd /example
#
ls
#
touch testfile
#
ls -al
total 4 drwxr-xr-x 2 root wheel 3 Aug 29 23:15 . drwxr-xr-x 21 root wheel 512 Aug 29 23:12 .. -rw-r--r-- 1 root wheel 0 Aug 29 23:15 testfile
No entanto, esse pool não está aproveitando nenhuma feature do ZFS. Para criar um dataset neste pool com a compressão ativada:
#
zfs create example/compressed
#
zfs set compression=gzip example/compressed
O dataset example/compressed
é agora um sistema de arquivos ZFS compactado. Tente copiar alguns arquivos grandes para /example/compressed
.
A compactação pode ser desativada com:
#
zfs set compression=off example/compressed
Para desmontar um sistema de arquivos, use zfs umount
e, em seguida, verifique com df
:
#
zfs umount example/compressed
#
df
Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ad0s1a 2026030 235232 1628716 13% / devfs 1 1 0 100% /dev /dev/ad0s1d 54098308 1032864 48737580 2% /usr example 17547008 0 17547008 0% /example
Para remontar o sistema de arquivos para torná-lo acessível novamente, use zfs mount
e verifique com o df
:
#
zfs mount example/compressed
#
df
Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ad0s1a 2026030 235234 1628714 13% / devfs 1 1 0 100% /dev /dev/ad0s1d 54098308 1032864 48737580 2% /usr example 17547008 0 17547008 0% /example example/compressed 17547008 0 17547008 0% /example/compressed
O pool e o sistema de arquivos também podem ser observados visualizando a saída do comando mount
:
#
mount
/dev/ad0s1a on / (ufs, local) devfs on /dev (devfs, local) /dev/ad0s1d on /usr (ufs, local, soft-updates) example on /example (zfs, local) example/compressed on /example/compressed (zfs, local)
Após a criação, os datasets do ZFS podem ser usados como qualquer sistema de arquivos. No entanto, muitos outros recursos estão disponíveis, e podem ser definidos por conjunto de dados. No exemplo abaixo, um novo sistema de arquivos chamado data
é criado. Arquivos importantes serão armazenados nele, portanto, ele é configurado para manter duas cópias de cada bloco de dados:
#
zfs create example/data
#
zfs set copies=2 example/data
Agora é possível ver o sistema de arquivos data
e o espaço utilizado através do comando df
:
#
df
Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ad0s1a 2026030 235234 1628714 13% / devfs 1 1 0 100% /dev /dev/ad0s1d 54098308 1032864 48737580 2% /usr example 17547008 0 17547008 0% /example example/compressed 17547008 0 17547008 0% /example/compressed example/data 17547008 0 17547008 0% /example/data
Observe que cada sistema de arquivos no pool tem a mesma quantidade de espaço disponível. Esta é a razão para usar o df
nestes exemplos, para mostrar que os sistemas de arquivos usam apenas a quantidade de espaço de que precisam e todos utilizam o mesmo pool. O ZFS elimina conceitos como volumes e partições e permite que vários sistemas de arquivos ocupem o mesmo pool.
Para destruir os sistemas de arquivos e, em seguida, destruir o pool, se ele não for mais necessário:
#
zfs destroy example/compressed
#
zfs destroy example/data
#
zpool destroy example
Discos falham. Um método para evitar perda de dados devido a falhas no disco é implementar RAID. O ZFS suporta esse recurso em seu design de pool. Os pools RAID-Z exigem três ou mais discos, mas fornecem mais espaço utilizável do que os pools espelhados.
Este exemplo cria um pool RAID-Z, especificando os discos a serem adicionados ao pool:
#
zpool create storage raidz da0 da1 da2
A Sun™ recomenda que o número de dispositivos usados em uma configuração RAID-Z seja entre três e nove. Para ambientes que exigem um único conjunto de 10 discos ou mais, considere dividi-lo em grupos menores de RAID-Z. Se apenas dois discos estiverem disponíveis e a redundância for um requisito, considere usar o ZFS mirror. Consulte zpool(8 ) para obter maiores detalhes.
O exemplo anterior criou o zpool storage
. Este exemplo cria um novo sistema de arquivos chamado home
neste pool:
#
zfs create storage/home
A compressão e a criação de cópias extras de diretórios e arquivos podem ser ativadas:
#
zfs set copies=2 storage/home
#
zfs set compression=gzip storage/home
Para tornar este o novo diretório home para usuários, copie os dados de usuários para este diretório e crie os links simbólicos apropriados:
#
cp -rp /home/* /storage/home
#
rm -rf /home /usr/home
#
ln -s /storage/home /home
#
ln -s /storage/home /usr/home
Os dados dos usuários agora são armazenados no recém-criado diretório /storage/home
. Teste adicionando um novo usuário e efetuando login como este usuário.
Tente criar um snapshot do sistema de arquivos que possa ser revertido posteriormente:
#
zfs snapshot storage/home@08-30-08
Os snapshots só podem ser realizados de um sistema de arquivos completo, não de um único diretório ou arquivo.
O caractere @
é um delimitador entre o nome do sistema de arquivos ou o nome do volume. Se um diretório importante tiver sido excluído acidentalmente, o backup do sistema de arquivos poderá ser feito e, em seguida, revertido para um snapshot anterior, quando o diretório ainda existia:
#
zfs rollback storage/home@08-30-08
Para listar todos os snapshots disponíveis, execute ls
no diretório .zfs/snapshot
no sistema de arquivos. Por exemplo, para ver o snapshot obtido anteriormente:
#
ls /storage/home/.zfs/snapshot
É possível escrever um script para criar snapshots frequentes dos dados do usuário. No entanto, com o tempo, os snapshots podem consumir muito espaço em disco. O snapshot anterior pode ser removido usando o comando:
#
zfs destroy storage/home@08-30-08
Após o teste, /storage/home
pode ser o verdadeiro /home
usando este comando:
#
zfs set mountpoint=/home storage/home
Execute o df
e o mount
para confirmar que o sistema agora trata o sistema de arquivos como o real /home
:
#
mount
/dev/ad0s1a on / (ufs, local) devfs on /dev (devfs, local) /dev/ad0s1d on /usr (ufs, local, soft-updates) storage on /storage (zfs, local) storage/home on /home (zfs, local)#
df
Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ad0s1a 2026030 235240 1628708 13% / devfs 1 1 0 100% /dev /dev/ad0s1d 54098308 1032826 48737618 2% /usr storage 26320512 0 26320512 0% /storage storage/home 26320512 0 26320512 0% /home
Isso conclui a configuração do RAID-Z. Atualizações de status diárias sobre os sistemas de arquivos criados podem ser geradas como parte das execuções noturnas doperiodic(8). Adicione esta linha ao /etc/periodic.conf
:
daily_status_zfs_enable="YES"
Todo software RAID tem um método de monitorar seu status
. O status dos dispositivos RAID-Z pode ser visualizado com este comando:
#
zpool status -x
Se todos os pools estiverem Online e tudo estiver normal, a mensagem mostrará:
all pools are healthy
Se houver um problema, talvez um disco que esteja no estado Offline, o status do pool será semelhante a:
pool: storage state: DEGRADED status: One or more devices has been taken offline by the administrator. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Online the device using 'zpool online' or replace the device with 'zpool replace'. scrub: none requested config: NAME STATE READ WRITE CKSUM storage DEGRADED 0 0 0 raidz1 DEGRADED 0 0 0 da0 ONLINE 0 0 0 da1 OFFLINE 0 0 0 da2 ONLINE 0 0 0 errors: No known data errors
Isso indica que o dispositivo foi colocado off-line anteriormente pelo administrador com este comando:
#
zpool offline storage da1
Agora o sistema pode ser desligado para substituir o da1
. Quando o sistema estiver novamente online, o disco com falha poderá ser substituído no pool:
#
zpool replace storage da1
Agora, o status pode ser verificado novamente, desta vez sem -x
, para que todos os pools sejam mostrados:
#
zpool status storage
pool: storage state: ONLINE scrub: resilver completed with 0 errors on Sat Aug 30 19:44:11 2008 config: NAME STATE READ WRITE CKSUM storage ONLINE 0 0 0 raidz1 ONLINE 0 0 0 da0 ONLINE 0 0 0 da1 ONLINE 0 0 0 da2 ONLINE 0 0 0 errors: No known data errors
Neste exemplo, tudo está normal.
O ZFS utiliza checksums para verificar a integridade dos dados armazenados. Estes são ativados automaticamente na criação dos sistemas de arquivos.
Os checksums podem ser desabilitados, mas isto não é recomendado! Os checksums ocupam muito pouco espaço de armazenamento e fornecem integridade dos dados. Muitos recursos do ZFS não funcionarão adequadamente com os checksums desabilitados. Não há nenhum ganho perceptível de desempenho ao desativar os checksums.
A verificação de checksum é conhecida como scrubbing. Verifique a integridade dos dados do pool storage
com este comando:
#
zpool scrub storage
A duração de um scrub depende da quantidade de dados armazenados. Quantidades maiores de dados levarão proporcionalmente mais tempo para serem verificadas. Scrubs utilizam muito I/O, e apenas um scrub tem permissão para ser executado por vez. Após a conclusão do scrub, o status pode ser visualizado com status
:
#
zpool status storage
pool: storage state: ONLINE scrub: scrub completed with 0 errors on Sat Jan 26 19:57:37 2013 config: NAME STATE READ WRITE CKSUM storage ONLINE 0 0 0 raidz1 ONLINE 0 0 0 da0 ONLINE 0 0 0 da1 ONLINE 0 0 0 da2 ONLINE 0 0 0 errors: No known data errors
A data de conclusão da última operação de scrub é exibida para ajudar a rastrear quando outro scrub é necessário. Uma rotina recorrente de scrubs ajuda a proteger os dados contra corrupção silenciosa e garante a integridade do pool.
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.