Configurar un servidor APF con netatalk en una Raspberry Pi
Introducción
Tras un rato con la configuración del NFS v4 para conectarme desde mi Macbook Pro a mi raspberrypi (linux conHypriot, he visto que al final perderé el tiempo, la velocidad no es muy agraciada, y encima se me olvidó un detalle, necesito una partición en un de mis discos atados a la raspberry que tengo formato hfsplus o apfs. A este punto no encontre nada sobre APFS para linux excepto un repositorio de github Apple File System for Linux y yo soy friki pero no idiota como para perder mi tiempo, y menos cuando una de las particiones va a ser mi Time Machine o backup.
Metodología
Debemos realizar los siguientes pasos: Instalar el soporte de HPFS+ Instalar soporte netatalk para poder comunicarnos con el protocolo de red de Apple. Particionar el disco con parted ya que el disco de Time Machine debe estar formateado y montado como una unidad HPFS+ Modificar el fichero de montaje fstab para que sea permanente Editar la configuración de netatalk
Después ya podremos comprobar el trabajo realizado.
En el ejemplo vamos a usar un disco de 5TB con dos particiones, una para hpfs+ y xfs
Soporte HPFS+
Actualización del sistema de paquetes
sudo apt-get update
sudo apt-get upgrade
Instalación de paquetes para HPFS+
Sin ellos no podremos dar soporte a nuestro linux para que lea y escriba en un sistema de ficheros HPFS+
sudo apt-get install hfsplus hfsutils hfsprogs gdisk
Crear una particion HPFS+
Primero necesitamos crear una partición para usar con dicho sistema de ficheros.
En mi caso voy a formatear un disco duro de 5TB en dos particiones. Una para xfs y otra para *hpfs+
Es un disco que actualmente tenía dos particiones, una reservada que no borre y otra xfs. En el proceso voy a eliminar las dos particiones para luego crear dos particiones conforme a mis deseos, usando parted
Más información Parted mejor que fdisk
❯ sudo parted /dev/sdb
GNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: Seagate Expansion Desk (scsi)
Disk /dev/sdb: 6001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 17.4kB 134MB 134MB Microsoft reserved partition msftres
2 135MB 6001GB 6001GB xfs BACKUP5T
(parted) rm 2
(parted) rm 1
(parted) print
Model: Seagate Expansion Desk (scsi)
Disk /dev/sdb: 6001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
(parted) quit
Information: You may need to update /etc/fstab.
❯ sudo parted -s /dev/sdb mkpart backupt3t 0% 50%
❯ sudo parted -s /dev/sdb mkpart timemachine 50% 100%
❯ sudo parted /dev/sdb
GNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: Seagate Expansion Desk (scsi)
Disk /dev/sdb: 6001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
2 1049kB 3001GB 3001GB backup3t
1 3001GB 6001GB 3001GB timemachine
(parted) quit
Que bien que ahora podemos formatear las dos particiones.
❯ sudo mkfs.hfsplus /dev/sdb2
Initialized /dev/sdb2 as a 2795 GB HFS Plus volume
❯ sudo mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=183141312 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=0
data = bsize=4096 blocks=732565248, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=357697, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Crear las particiones de montaje
Creamos las particiones de montaje para ambos sistemas, y ya que van a aser usadas en un entorno personal le damos los permisos adecuados
❯ sudo mkdir /timemachine
❯ sudo mkdir /backup3t
Probar el montaje manual
Primero probamos manualmente el montaje, y luego pasaremos a el montaje automático en cada reinicio.
Aconsejado cuando hacemos cosas con nuevos dispositivos, y sistemas de ficheros, para liberarnos de problemas en el montaje automático.
El comando de abajo, formateara la partición con las siguientes características (disponible la ayuda man de man mkfs.hfsplus
- s Que creará un formato sensitivo al caso (distinguir mayúsculas de minúsculas)
- v nombre del volumen
Lo de Apple y las mayusculas y minusculas es que no me entra. Un sistema UNIX como es MacOSX basado en Darwin, en el que coexiste con otros UNIX, que por defecto te instala un sistema sin distinción de caso.
La opción J Crearía el volumen con un fichero de diario o journal en este caso de 512M (máximo). Yo lo considero necesario pues en caso de un problema con el disco en un reinicio, corte de electricidad, es una garantía muy fuerte de que se recuperara la información, y en backups basados en rsync como los es el Time Machine, es más que necesario por la cantidad tan gigante de información que se genera en el journal. Lamentablemente a la fecha no conozco soporte para instalar el journal ya que al montaje, el disco se haria indisponible por un problema de permisos sobre el journal.
❯ sudo mkfs.hfsplus -s -v timemachine /dev/sdb1
Initialized /dev/sdb1 as a 2795 GB HFS Plus volume
❯ sudo fsck.hfsplus /dev/sdb1
** /dev/sdb1
** Checking HFS Plus volume.
** Detected a case-sensitive catalog.
** Checking Extents Overflow file.
** Checking Catalog file.
** Checking Catalog hierarchy.
** Checking volume bitmap.
** Checking volume information.
** The volume timemachine appears to be OK.
Montaje automatizado de los discos
Una vez montado podemos ver las opciones del montaje que estarán disponibles en el /etc/mtab
/dev/sdb1 /timemachine hfsplus rw,relatime,umask=22,uid=0,gid=0,nls=utf8 0 0
Editamos el fichero /etc/fstab
❯ sudo cat /etc/fstab |grep time
/dev/sdb1 /timemachine hfsplus rw,relatime,umask=22,uid=0,gid=0,nls=utf8 0 1
Con ellas ya tenemos una idea de que poner en el /etc/fstab
Obtención del UUID
Suelo montar las particiones con UUID y con más razón cuando son discos externos, ya que un cambio, eliminación de dispositivo, error, en un reinicio puede cambiar las letras del dispositivo.
> sudo blkid
Edición del fstab
UUID=6bc6f79f-c74f-35a1-b226-092396e3fed1 /timemachine hfsplus rw,relatime,umask=22,uid=0,gid=0,nls=utf8 0 1
UUID=c0f66c48-3a78-4c1a-bc7f-6d4ad854f284 /backup3t xfs rw,noquota,nofail 0 1
Configuración de netatalk
Una buen guía de netatalk es la Guia de Archlinux | Netatalk aunque es bueno darse una leída al propio proyecto Netatalk
Abajo mi configuración
❯ cat /etc/netatalk/afp.conf
;
; Netatalk 3.x configuration file
;
[Global]
; Global server settings
; mimic model = TimeCapsule6,106
log level = default:warn
log file = /var/log/afpd.log
hosts allow = 192.168.1.0/24
spotlight = yes
; [Homes]
; basedir regex = /home
[Pirate]
path = /home/pirate
valid users = pirate
[Backup10t]
path = /backup10t
valid users = pirate
[Backup3t]
path = /backup3t
valid users = pirate
[My Time Machine Volume]
path = /timemachine
time machine = yes
Reiniciar netatatalk con sudo systemctl restart netatalk
ya tendremos disponibles nuestras particiones en el mac a través de las unidades de red.
Nota: El reinicio de netatalk tras algún cambio o el inicio por primera vez, tardará dependiendo de la cantidad de contenidos de las unidades compartidas configuradas.
Montaje de las particiones
Ya está, ya solo tenemos conectarnos al servidor y montar nuestras particiones.
Desde el Finder > Ir > Conectarse a un servidor (⌘)
NOTA: La primera vez que se conecta a un servidor APF tardará un buen rato en terminar la conexión. Sé paciente, sobre todo si tus discos o particiones APF tiene un gran volumen de ficheros y enlaces, ya que este sistema de red, tiene una especie de journal, que tiene que completar. No te desesperes, en mi caso la primera vez tardó casi 10 minutos, ya que el disco
backup10t
tiene casi 8TB de backups con rsync de más de 2 años, lo que hace que su número de inodos usados en enlaces duros sea muy elevado.
Configurar Time Machine
Ahora ya podemos configurar nuestro Time Machine Preferencias > Time Machine y disfrutar delo aprendido.
Disclaimer o descargo de responsabilidad
Esto es un documento tipo “Yo lo hice así y me funciono”. Eso supone que cuando menos tienes conocimientos, gustas de leer la documentación y tratar de entenderla. Que eres un forofo de las copias de seguridad y que por supuesto, eres consciente de que si haces algo mal la puedes liar. No me vengas luego con llantos. Si te pasa algo yo no soy el culpable. ¿Entendido? Que los disfrutes.
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.