Crea un disco en línea con Raspberry y Samba

En este artículo te guiaré a lo largo del recorrido para instalar y configurar un disco en línea, también conocido como NAS (Network Attached Storage, en inglés) utilizando un disco duro externo y tu Raspberry Pi.

No, lo siento, no vamos a hacer que nuestra Raspberry Pi baile al ritmo de samba, pero sí utilizaremos el programa Samba para configurar nuestro disco de red.

Una vez montado, seremos capaces de acceder a los archivos que colguemos ahí desde cualquier sitio, será como tener nuestro propio servicio de Dropbox o Onedrive, pero privado y exclusivo.

Es un proyecto muy útil, de hecho, es de los pocos que recomiendo tener siempre activos, de acuerdo con el artículo que escribí sobre solo mantener algunos servicios importantes activos continuamente. Lo puedes consultar aquí:

No te conviertas en esclavo de la automatización
Como no convertirse en esclavo de tu propia automatización. Principio KISS. Principio YAGNI. Principio de pasárselo bien.
De los pocos que merece la pena mantener.

Dicho eso, ¡vamos a empezar!

Instalación del disco duro externo

💡
En calidad de Afiliado de Amazon, obtengo ingresos por las compras adscritas que cumplen los requisitos aplicables

Para esta instalación, utilizaremos un disco externo USB. En mi experiencia, los discos externos de Seagate me han funcionado muy bien con la Raspberry Pi:

Seagate Expansion Portable Drive 1TB

Ver en Amazon

Lo primero que haremos es conectarlo a nuestra Raspberry pi y ejecutamos el comando lsusb para ver que lo reconocemos en el sistema:

ardumaster@little-monkey:~ $ lsusb
Bus 001 Device 005: ID 0bc2:231a Seagate RSS LLC Expansion Portable
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
lsusb para ver los dispositivos conectados, busca tu disco duro externo.

Perfecto, vamos a ver dónde tenemos este dispositivo conectado:

ardumaster@little-monkey:~ $ sudo blkid
/dev/mmcblk0p1: LABEL_FATBOOT="boot" LABEL="boot" UUID="3E99-EE5D" TYPE="vfat" PARTUUID="95f07e05-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="b85033cb-2854-4795-97f7-afa983a23700" TYPE="ext4" PARTUUID="95f07e05-02"
/dev/sda1: LABEL="Seagate Expansion Drive" UUID="B29AECFA9AECBC4B" TYPE="ntfs" PTTYPE="atari" PARTUUID="b5f38fae-01"
/dev/mmcblk0: PTUUID="95f07e05" PTTYPE="dos"
blkid para los detalles de nuestro disco.

Identificamos nuestro disco duro externo y vemos que está situado en /dev/sda1. Ahora tenemos toda la información que necesitamos para montarlo en el sistema, es decir, engancharlo a nuestro sistema de archivos y carpetas para poder acceder a los contenidos.

Sin embargo, antes de hacer esto deberíamos crear el directorio donde queremos montar el disco:

ardumaster@little-monkey:~ $ sudo mkdir /mnt/extra
Creamos un directorio para nuestro disco.

Y ajustamos los permisos:

ardumaster@little-monkey:~ $ sudo chmod 770 /mnt/extra
Permisos 770 para el directorio nuevo.

Finalmente podemos montar el disco:

ardumaster@little-monkey:~ $ sudo mount /dev/sda1 /mnt/extra/
Montamos el disco en el directorio nuevo.

Y ya lo tendríamos, con navegar hasta /mnt/extra encontraríamos nuestros archivos. Sin embargo, al reiniciar la Raspberry, deberíamos volver a montar el sistema, queremos hacer que se monte automáticamente al encender el ordenador; vamos a indicárselo a nuestra Raspberry.

Tomamos nota del UUID de nuestro disco duro externo (lo vimos anteriormente con el comando blkid) y del tipo de formato (en nuestro caso ntfs porque viene de un ordenador de Windows con archivos ya dentro) y añadimos la siguiente línea:

UUID=NUESTRA_UUID NUESTRO_DIRECTORIO FORMATO defaults,auto,users,rw,nofail 0 0
En mi caso: UUID=B29AECFA9AECBC4B /mnt/extra ntfs defaults,auto,users,rw,nofail 0 0

A fstab:

ardumaster@little-monkey:~ $ sudo nano /etc/fstab
Editamos fstab.

Para que quede así:

proc            /proc           proc    defaults          0       0
PARTUUID=95f07e05-01  /boot           vfat    defaults          0       2
PARTUUID=95f07e05-02  /               ext4    defaults,noatime  0       1
UUID=B29AECFA9AECBC4B /mnt/extra ntfs defaults,auto,users,rw,nofail 0 0
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
Aquí aparece mi ejemplo como la última línea.

Ya tenemos todo configurado para que nuestro disco se monte automáticamente en el directorio indicado. Solo nos falta hacer que nuestra Raspberry baile.

Instalando Samba

Empezamos instalando Samba de los repositorios:

ardumaster@little-monkey:~ $ sudo apt-get install samba samba-common-bin
Instalamos Samba.

Y modificamos la configuración para indicarle que disco queremos compartir añadiendo el siguiente bloque de texto:

[SambaArdumaster]
path = /mnt/extra
writeable=Yes
create mask=0777
directory mask=0777
public=yes
Puedes darle otro nombre, en mi caso el disco Samba se llama SambaArdumaster

Al final de /etc/samba/smb.conf:

ardumaster@little-monkey:~ $ sudo nano /etc/samba/smb.conf
Editamos el archivo de configuración de Samba.

Reiniciamos Samba para recargar la configuración:

ardumaster@little-monkey:~ $ sudo systemctl restart smbd
Con esto reiniciamos el servicio de Samba.

Y ya podríamos conectarnos desde otro ordenador, vamos a ver cómo hacerlo desde Windows.

Conectándonos desde Windows

Conectarse desde Windows es muy sencillo, basta con ir al explorador de archivos y seleccionar “conectar a unidad de red” después de hacer clic derecho sobre el icono de “Este equipo”:

Creamos una conexión a una nueva unidad de red en Windows.

En el siguiente diálogo, basta con escribir la dirección IP local de nuestra Raspberry (consulta este artículo para saber cómo averiguarla) seguida del nombre del disco Samba que hemos asignado anteriormente (en este tutorial, SambaArdumaster):

Configuramos nuestra nueva unidad de red.
💡
Recuerda utilizar este tipo de barra: \ y no /.

Conectándonos desde cualquier sitio

Hemos conseguido crear una unidad de red donde guardar nuestros archivos y poder acceder a ellos desde la red local, pero ¿cómo podemos acceder a ellos desde fuera de casa?

Hemos creado un directorio público, por lo que no es buena idea conectarlo directamente a internet (tampoco lo sería aunque fuese privado). Lo que recomiendo es instalar una VPN privada y acceder a este disco como si estuvieras en tu casa, aunque estés al otro lado del mundo.

Recomiendo utilizar Wireguard para instalar tu propia VPN en casa; en el siguiente artículo puedes encontrar como hacer esto de una forma muy sencilla:

Olvídate de anuncios estés donde estés con Pi-hole y WireGuard
Elimina anuncios en apps y internet en tu LAN y a distancia con WireGuard, Pi-Hole y Duck DNS

Conclusiones

Con esto terminamos el proyecto. Ahora tenemos una unidad de red dónde subir todo lo que queramos. Comprobaras que es un proyecto muy útil, no solo para guardar tus archivos, sino que también nos permitirá hacer proyectos más avanzados basados en este. ¡No te los pierdas próximamente!