Mac OS

Añadir rutas estáticas en MacOS

En las antiguas versiones de MacOS, las rutas se agregaban al igual que en cualquier distribución de Linux con el route and. Pero desde las últimas versiones de MacOSX, el comando ha cambiado, siendo un subconjunto del comando  networksetup

Interfaces

Para ver las interfaces, ejecutaremos

networksetup -listallnetworkservices
An asterisk (*) denotes that a network service is disabled.
Ethernet
Ethernet Manual
Ethernet FIJA
USB 10/100/1000 LAN
VOZ
Thunderbolt Bridge
Wi-Fi
iPhone USB

Aquí vemos una lista de las interfaces de red definidas.

Agregar ruta estática

Para agregar rutas en MacOs debemos teclear el siguiente comando

networksetup -setadditionalroutes <interface> <dest> <mask> <gateway>

Donde <interface> será una de las listadas anteriormente

Ejemplo:
networksetup -setadditionalroutes Wi-Fi 10.230.0.0 255.255.255.0 10.230.0.2
Comprobar la ruta estática
Para comprobar si todo es correcto, teclaremos:
networksetup -getadditionalroutes <interfaz>

Ejemplo:

networksetup -getadditionalroutes Wi-Fi                                                                                                             08:17:40
10.230.0.0 255.255.255.0 10.230.0.2
Borrar la ruta estática

Teclearemos el comando de setup, pero sin el argumento de la red, sólo el interfaz

networksetup -setadditionalroutes <interface> 

Ejemplo:

networksetup -setadditionalroutes Wi-Fi 


Usar una Raspberry Pi 4 para Time Machine

En primer lugar actualizaremos

sudo apt-get update && sudo apt-get upgrade
Instalar Samba


Primero instalaremos Samba (para SMB), que es un protocolo de intercambio de archivos de código abierto muy popular que cuenta con el respaldo oficial de Time Machine para realizar copias de seguridad de datos a través de una red. El daemon de Avahi se utiliza para el protocolo mDNS “Bonjour” de Apple para que nuestro servidor Raspberry Pi se detecte automáticamente dentro de la red.

sudo apt-get install samba avahi-daemon
Conecta el disco duro al puerto USB 3.0


Como la Raspberry Pi 4 viene con 2 puertos USB 3.0, podemos conectar un disco duro externo como nuestro espacio en disco para hacer una copia de seguridad de los datos. tendremos velocidades decentes, si también tenemos una conexión por cable de 1 GBit/s con el Pi 4.

Creamos una carpeta para montar el disco
Comprobamos que el disco está conectado
root@raspberrypi:/mnt# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0  1,8T  0 disk
mmcblk0     179:0    0 29,7G  0 disk
├─mmcblk0p1 179:1    0  256M  0 part /boot
└─mmcblk0p2 179:2    0 29,5G  0 part /

Vemos que tenemos un disco en /devsda

Comprobamos el UUID
root@raspberrypi:/mnt# blkid
/dev/mmcblk0p1: LABEL_FATBOOT="boot" LABEL="boot" UUID="5EA1-EC88" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="c90a195c-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="f0702b0a-e54b-4c34-bd2d-6e52a561898c" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="c90a195c-02"
/dev/sda1: UUID="5e5aa2cf-a809-4139-8096-e3647fa4e116" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="cf7da363-01"

Vemos que el UUID es "5e5aa2cf-a809-4139-8096-e3647fa4e116"

En nuestro caso, ya está particionado, si no fuera así

sudo mkfs -t ext4 /dev/sda
Creamos un usuario para el backup
sudo adduser timemachine

Te pedirá que establezcas una contraseña para el usuario recién creado.

Ahora crearemos la contraseña de Samba
sudo smbpasswd -a timemachine
Crear punto de montaje


Para montar el disco duro USB, necesitamos crear una carpeta donde Linux pueda montar nuestro dispositivo.

sudo mkdir /mnt/timemachine
Cambiar permisos


Para permitir que nuestro usuario de respaldo escriba en el dispositivo, necesitaremos asumir la propiedad del punto de montaje:

sudo chown -R timemachine: /mnt/timemachine
Crear montaje

Editaremos el fichero fstab

nano /etc/fstab

Estará aproximadamente así

proc            /proc           proc    defaults          0       0
PARTUUID=c90a195c-01  /boot           vfat    defaults,flush    0       2
PARTUUID=c90a195c-02  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

Añadimos una linea con el UUID del disco, y el punto de montaje al final del fichero

UUID=5e5aa2cf-a809-4139-8096-e3647fa4e116 /mnt/timemachine      ext4    sync,noexec,nodev,noatime,nodiratime    0       0

El fichero quedará así

proc            /proc           proc    defaults          0       0
PARTUUID=c90a195c-01  /boot           vfat    defaults,flush    0       2
PARTUUID=c90a195c-02  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
UUID=5e5aa2cf-a809-4139-8096-e3647fa4e116 /mnt/timemachine      ext4    sync,noexec,nodev,noatime,nodiratime    0       0

Los modificadores significan:

sync: todas las escrituras en el disco deben hacerse sincrónicamente.
noexec: no permite la ejecución directa de ningún binario en el sistema de archivos montado, ya que solo se utilizará para el almacenamiento de copia de seguridad.
nodev: no interpreta caracteres ni bloquea dispositivos especiales en el sistema de archivos.
noatime: no almacena tiempos de acceso en este sistema de archivos.
nodirtime: no almacena tiempos de acceso al directorio en este sistema de archivos.
0: ignora este sistema de archivos cuando lo use dump
0: no verifica el fsck al reiniciar.

Salvamos y comprobamos que funciona con un mount -a

mount -a

Si nada falla, tendremos el disco montado en la carpeta /etc/timemachine

root@raspberrypi:/mnt# ls -la /mnt/timemachine/
total 40
drwxr-xr-x  5 timemachine timemachine  4096 ago 10 22:52  .
drwxr-xr-x  3 root        root         4096 ago 12 18:51  ..
drwx------  2 timemachine timemachine 16384 jul 28 19:24  lost+found
Configurar Samba


Edita el archivo de configuración de Samba y agrega lo siguiente al final:

[backups]
    comment = Backups
    path = /mnt/timemachine
    valid users = timemachine
    read only = no
    vfs objects = catia fruit streams_xattr
    fruit:time machine = yes

Comprobamos la configuración de samba

sudo testparm -s
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed
WARNING: some services use vfs_fruit, others don't. Mounting them in conjunction on OS X clients results in undefined behaviour.

Server role: ROLE_STANDALONE

# Global parameters
[global]
	log file = /var/log/samba/log.%m
	logging = file
	map to guest = Bad User
	max log size = 1000
	obey pam restrictions = Yes
	pam password change = Yes
	panic action = /usr/share/samba/panic-action %d
	passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
	passwd program = /usr/bin/passwd %u
	server role = standalone server
	unix password sync = Yes
	usershare allow guests = Yes
	idmap config * : backend = tdb


[homes]
	browseable = No
	comment = Home Directories
	create mask = 0700
	directory mask = 0700
	valid users = %S


[printers]
	browseable = No
	comment = All Printers
	create mask = 0700
	path = /var/spool/samba
	printable = Yes


[print$]
	comment = Printer Drivers
	path = /var/lib/samba/printers


[backups]
	comment = Backups
	path = /mnt/timemachine
	read only = No
	valid users = timemachine
	vfs objects = catia fruit streams_xattr
	fruit:time machine = yes
Reiniciamos Samba
sudo service smbd reload

Y lo habilitamos en el inicio

systemctl enable smdb
Configurar el demonio de Avahi

Para permitir que MacOS detecte automáticamente nuestra nueva Time Machine, necesitaremos configurar Avahi. Para eso edita el siguiente archivo:

sudo nano /etc/avahi/services/samba.service

Y pega este contenido

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name replace-wildcards="yes">%h</name>
  <service>
    <type>_smb._tcp</type>
    <port>445</port>
  </service>
  <service>
    <type>_device-info._tcp</type>
    <port>9</port>
    <txt-record>model=TimeCapsule8,119</txt-record>
  </service>
  <service>
    <type>_adisk._tcp</type>
    <port>9</port>
    <txt-record>dk0=adVN=backups,adVF=0x82</txt-record>
    <txt-record>sys=adVF=0x100</txt-record>
  </service>
</service-group>

Reiniciamos el demonio de Avahi

sudo service avahi-daemon restart
sudo systemctl enable avahi-daemon

Ahora nos conectamos

Vamos a las preferencias de timemachine en el mac

Captura de Pantalla 2022-08-12 a las 19.21.14.png

Conectamos con el disco

Captura de Pantalla 2022-08-12 a las 19.21.24.png


Debemos de poner nuestro usuario y la contraseña que hemos elegido

Captura de Pantalla 2022-08-12 a las 19.21.42.png

Y ya está.



No se libera espacio en volúmenes APFS

APFS y el borrado de archivos

Si está utilizando macOS 10.13+ y el sistema de archivos que usas es APFS, es posible que los archivos que hayas eliminado aún existan dentro de una instantánea de APFS.

Instantáneas APFS

Estas instantáneas APFS son utilizadas por macOS y varias utilidades de copia de seguridad como Time Machine. Muchas de estas instantáneas APFS se eliminarán automáticamente después de aproximadamente una semana o después de que Time Machine envíe la copia de seguridad a la unidad de Time Machine externa.

Esto está muy bien, excepto en ele caso de discos externos, de los que no se hace copia en Time Machine.

¿Que hacer si necesitas liberar espacio?

En este caso tendremos que tirar de un comando de Mac OSX llamado tmutil 

tmutil

el comando tmutil nos permite comprobar las instantáneas de disco almacenadas. La sintaxis es:

tmutil listlocalsnapshots [Volumen] o punto de montaje

tmutil listlocalsnapshots /Volumes/Datos/
Snapshots for disk /Volumes/Datos/:
com.apple.Timemachine.36902823-2587-45DA-B8AC-F2928BF17D1F.2022-08-03-170508
com.apple.Timemachine.631798C6-FA8C-4BB2-806B-69EB184878AE.2023-07-15-104837
com.apple.Timemachine.DCA013CF-D2C9-49BA-A536-28335B673E16.2023-07-16-144325
com.bombich.ccc.F0E3A50D-07C7-4C86-8270-D9E7C77804A6.2022-07-25-183548
com.bombich.ccc.F6694D63-948A-4E75-8054-DC45356697A8.2023-07-16-144503

En el ejemplo vemos tres instantáneas de Time Machine y dos de Carbon Copy

Los comandos han de ejecutarse con sudo

Podemos eliminarlas con el comando

tmutil deletelocalsnapshots nombre-del-snapshot

Ejemplo

Snapshots for disk / : 
com. apple.TimeMachine.2023-06-26-110954.local
com. apple.TimeMachine.2023-06-26-121009.local 
com. apple.TimeMachine.2023-06-26-131912.local
edu@MacBookProEdu>sudo tmutil deletelocalsnapshots 2023-06-26-110954
Password:
Deleted local snapshot '2023-06-26-110954'
edu@MacBookProEdu>

O bien con el comando

tmutil thinlocalsnapshots mount_point [purge_amount] [urgency]

Como hemos comentado, hay que ejecutarlos con privilegios de superadmin

sudo tmutil thinlocalsnapshots mount_point [purge_amount] [urgency]

Las cantidades de purgado se representan como bytes, por lo que especificar 20 gigabytes de espacio estaría representado por el número:

21474836480

Los niveles de urgencia van del 1 al 4, y la configuración de urgencia predeterminada es 1.

Nivel 4 de Urgencia

Lo más urgente: Cualquier proceso de copia de seguridad actual se detiene y la reducción se realiza de inmediato. La copia de seguridad más grande disponible será la primera que se reduzca, y la reducción se realizará a través de las siguientes copias de seguridad más grandes.

Nivel 1 de Urgencia

Menos urgente: los procesos de copia de seguridad actuales se completarán antes de que comience el proceso de reducción. La copia de seguridad disponible más antigua se reducirá primero, y la reducción continuará a través de las siguientes copias de seguridad más antiguas.