Páginas

Mostrando entradas con la etiqueta SSD. Mostrar todas las entradas
Mostrando entradas con la etiqueta SSD. Mostrar todas las entradas

martes, 10 de marzo de 2026

Formatear y montar dispositivo USB exFAT en FreeBSD 14.3

Fuente:

https://docs.freebsd.org/en/books/handbook/filesystems/

En FreeBSD 14.3, el sistema no tiene soporte nativo para exFAT en el kernel. Para el montaje de un disco USB exFAT (/dev/da0 o /dev/da0p1 /dev/da0s1), se necesita utilizar FUSE y el puerto fusefs-exfat.

Instalar los paquetes necesarios

pkg install fusefs-libs fusefs-exfat

pkg info | grep -i exfat
exfat-utils-1.4.0_1    Utilities to create, check, label and dump exFAT filesystem
fusefs-exfat-1.4.0_1   Full-featured exFAT FS implementation as a FUSE module

Cargar el módulo FUSE

kldload fusefs

Para cargar siempre al inicio

sysrc kld_list+="fusefs"

Identificar correctamente el dispositivo

dmesg
da0 at umass-sim0 bus 0 scbus1 target 0 lun 0
da0: <ASMT USB 3.0 TOSATA 0> Fixed Direct Access SPC-4 SCSI device
da0: Serial Number 0000000000A3
da0: 400.000MB/s transfers
da0: 38166MB (78165360 512 byte sectors)
da0: quirks=0x2

Particionar /dev/da0 desde FreeBSD 14.3

Desmontar si está montado (por seguridad)

umount /dev/da0p1 2>/dev/null || true 

Formatear dispositivo /dev/da0

Borrar todo y crear tabla GPT (destructivo)

sudo gpart destroy -F da0
da0 destroyed

gpart create -s gpt da0 
da0 created

Agregar una partición que ocupe todo el disco con el tipo ms-basic-data que Windows/macOS reconocen como exFAT

gpart add -t ms-basic-data -l "MiSSD" da0
da0p1 added

Formatear la partición (da0p1)

mkexfatfs /dev/da0p1
mkexfatfs 1.4.0
Creating... done.
Flushing... done.
File system created successfully.

Crear punto de montaje y montar la particion

mkdir /mnt/usb
mount.exfat /dev/da0p1 /mnt/usb
FUSE exfat 1.4.0 (libfuse2)

Mostrar espacio libre en disco

df -h /mnt/usb 
Filesystem    Size   Used   Avail Capacity  Mounted on
/dev/da0p1     37G   1.6M     37G     0%    /mnt/usb

Listar las particiones

gpart show da0
=>      40  78165280  da0  GPT  (37G)
        40  78165280    1  ms-basic-data  (37G)

El dispositivo real suele ser

/dev/da0p1 (GPT con letra p)
/dev/da0s1 (MBR/slice con letra s)

Es importante desmontar antes de desconectar

umount /mnt/usb
FreeBSD es genial!.

jueves, 26 de febrero de 2026

mount FreeBSD Cifrado ZFS desde liveCD y encontrar partición root

Fuente:

https://klarasystems.com/articles/manipulating-a-pool-from-the-rescue-system/
 mkdir /tmp/mountado
 geli attach /dev/nda0p4
 zpool import -f -R /tmp/montado zroot
 zfs list zroot
 NAME                            USED  AVAIL  REFER  MOUNTPOINT
zroot                            223G   211G    96K  /zroot
zroot/ROOT                      82.9G   211G    96K  none
zroot/ROOT/14.3-RELEASE-p8         8K   211G  21.1G  /
zroot/ROOT/default              82.9G   211G  21.3G  /
zroot/cache                     3.04G   211G    96K  /zroot/cache
zroot/cache/ccache              3.04G   211G  3.04G  /var/cache/ccache
zroot/home                      75.3G   211G    96K  /home
zroot/home/carlos               75.3G   211G  67.4G  /home/carlos
zroot/reserved                  50.0G   261G    96K  /zroot/reserved
zroot/tmp                        320K   211G   180K  /tmp
zroot/usr                       9.89G   211G    96K  /usr
zroot/usr/ports                 6.99G   211G  2.91G  /usr/ports
zroot/usr/src                   2.90G   211G  2.63G  /usr/src
zroot/var                       1.61G   211G    96K  /var
zroot/var/audit                   96K   211G    96K  /var/audit
zroot/var/crash                 1.60G   211G  1.60G  /var/crash
zroot/var/log                   3.11M   211G  2.00M  /var/log
zroot/var/mail                   356K   211G   260K

Propiedad canmount de zroot/ROOT/default

zfs get mountpoint,canmount,mounted zroot/ROOT/default
NAME                PROPERTY    VALUE       SOURCE
zroot/ROOT/default  mountpoint  /           local
zroot/ROOT/default  canmount    noauto      local
zroot/ROOT/default  mounted     yes         -

¿Qué hace canmount=noauto?

La propiedad canmount en ZFS controla si un dataset puede ser montado. Tiene tres valores posibles:

on - El dataset se monta automáticamente cuando es necesario (por ejemplo, al importar el pool o al ejecutar zfs mount -a).

off - El dataset no puede ser montado en absoluto.

noauto - El dataset no se monta automáticamente por operaciones generales del sistema (como zfs mount -a o la importación del pool), pero puede ser montado manualmente con zfs mount. Es un estado intermedio que lo hace "disponible pero no automático".

Montar zroot/ROOT/default con el comando mount

 zfs mount zroot/ROOT/default

Despues de finalizar los cambios exportar el zpool

zpool export zroot

Reiniciar y arrancar desde el disco duro NVMe (nda0)

 shutdown -r now
FreeBSD es genial!.

jueves, 19 de febrero de 2026

Migración de SSD a disco de mayor capacidad en FreeBSD 14.3 send receive vía USB

Estado actual del sistema

zpool status
zpool list 
zpool list -t all

Identificar discos

geom disk list
camcomtrol devlist

Anotar el disco actual (ada0) y el nuevo disco USB (da0)


Limpiar el disco nuevo completamente

gpart destroy -F da0
dd -if=/dev/zero of=/dev/da0 bs=1M count=100

Crear tabla de particiones GPT

gpart create -s gpt da0

Partición de arranque EFI (si el sistema usa UEFI)

gpart add -t efi -s 260M -l efiboot-new da0

Partición de arranque BIOS/GPT (para compatibilidad legacy)

gpart add -t freebsd-boot -s 512k -l gptboot-new da0

Partición swap

gpart add -t freebsd-swap -s 8G -a 1M -l swap0 da0

Particion ZFS (el resto del disco)

gpart add -t freebsd-zfs -a 1M -l zroot-new da0

Para sistemas UEFI


Montar partición EFI del disco nuevo

newfs_msdos -F 32 -c 1 /dev/da0p1
mount -t msdosfs /dev/da0p1 /mnt

Copiar EFI loader desde el actual disco

mkdir -p /mnt/EFI/BOOT
cp -r /boot/efi/EFI/BOOT /mnt/EFI/

umount /mnt

Crear pool temporal en el nuevo disco

Crear pool temporal con nombre diferente para evitar conflictos
zpool create -o altroot=/mnt \
             -o ashift=12 \
             -O compression=lz4 \
             -O atime=off \
             -O xattr=sa \
             -O acltype=posix \
             -m none \
             zroot-new /dev/da0p3

Verificar

zpool status zroot-new

Listar todos los datasets a migrar

zfs list -H -o name -t filesystem,volume

Tomar snapshot recursivo de todo el pool (Shell zsh)

sudo zfs snapshot -r zroot@migracion

Verificar snapshot creado

zfs list -t snapshot -o name | grep "$migracion" 
zroot@migracion
zroot/ROOT@migracion
zroot/ROOT/14.3-RELEASE-filebrowser-tailscale-serve-certs-https@migracion
zroot/ROOT/14.3-RELEASE_2026-02-14_193200@migracion
zroot/ROOT/default@2026-02-14-19:32:00-0
zroot/ROOT/default@2026-02-17-17:48:09-0
zroot/ROOT/default@migracion
zroot/home@migracion
zroot/home/carlos@migracion
zroot/tmp@migracion
zroot/usr@migracion
zroot/usr/ports@migracion
zroot/usr/src@migracion
zroot/var@migracion
zroot/var/audit@migracion
zroot/var/crash@migracion
zroot/var/log@migracion
zroot/var/mail@migracion
zroot/var/tmp@migracion

Enviar snapshot raíz primero

zfs send -Lec zroot@migration-$(date +%Y%m%d) | \
    zfs receive -Fuv zroot-new

Enviar recursivamente todos los datasets hijos

zfs send -RLec zroot@migration-$(date +%Y%m%d) | \
    zfs receive -Fuv zroot-new

Banderas (flags)

-R Recursivo (todos los datasets hijos)
-L Incluye large blocks
-e Embed data (bloques pequeños inline)
-c Comprime el stream
-F En receive: fuerza rollback si es necesario
-u No monta los datasets al recibirlos
-v Verbose

Comprobar la replicación


Comparar conjuntos de datos entre pools

zfs list -r zroot
zfs list -r zroot-new

Verificar propiedades

zfs get all zroot
zfs get all zroot-new

Cantidad de instantáneas

zfs list -t snapshot -r zroot | wc -l
zfs list -t snapshot -r zroot-new | wc -l

Configurar bootfs en el nuevo pool

zpool set bootfs=zroot-new/ROOT/default zroot-new

Verificar

zpool get bootfs zroot-new

Ajustar cachefile y otros parámetros del pool

zpool set cachefile=/boot/zfs/zpool.cache zroot-new

Ver propiedades del pool original para replicarlas

zpool get all zroot

Montar el dataset raíz del nuevo disco

zfs set mountpoint=/mnt zroot-new/ROOT/default
zfs mount zroot-new/ROOT/default

Verificar /boot/loader.conf

cat /mnt/boot/loader.conf

Debe contener algo como:

zfs_load="YES"
vfs.root.mountfrom="zfs:zroot/ROOT/default"

Si el nombre del pool cambió, actualizar:

sed -i '' 's/zroot-new/zroot/g' /mnt/boot/loader.conf

También verificar /etc/fstab (en ZFS puro suele estar sin referencias a ada0)

cat /mnt/etc/fstab

Cambiar el disco y primer arranque


Apagar el sistema

shutdown -p now

Desconectar el disco viejo Conectar el nuevo disco en el slot interno (ya no como USB) Comprobar en BIOS/UEFI que el nuevo disco sea el primero en el orden de arranque Arrancar

Verificación después del arranque


Comprobar salud del pool

zpool status
zpool list

Verificar que todos los datasets montaron

zfs list -t filesystem

Verificar espacio disponible (debe reflejar el disco nuevo mayor)

df -h

Verificar que el sistema arrancó desde el disco correcto

geom disk list
camcontrol devlist

Limpiar snapshots de migración

zfs destroy -r zroot@migracion

Problemas y posibles soluciones después del primer arranque


Renombrar zpool zroot-new a zroot

zpool import -f zroot-new zroot

Error

zpool export zroot-new Cannot unmount /

Es el error clásico: el dataset raíz (/) está montado desde zroot-new, así que ZFS no puede desmontarlo en caliente

Solución Desde loader prompt o LiveCD


Desde el LiveCD

zpool import -f zroot-new zroot
zpool set bootfs=zroot/ROOT/default zroot
zpool export zroot

zpool import -f zroot-new zroot
   zpool set bootfs=zroot/ROOT/default zroot
   zpool export zroot hecho.

Reiniciar

shutdown -r now

FreeBSD al arrancar y no encontrar zroot buscará pools disponibles. Si el disco nuevo ya está interno, lo encontrará como zroot-new y podrás importarlo con el nombre correcto.

Después de reiniciar sin el LiveCD el sistema arranca desde el nuevo disco duro.

Estos dos errores son normales y esperables en este proceso.

1. swapon: /dev/da0p3: No such file or directory, 
2. Import of zpool cache /etc/zfs/zpool.cache failed

El archivo /etc/fstab del sistema nuevo todavía referencia el dispositivo del disco USB (da0) que ya no existe. Ahora el disco está interno, probablemente como ada0 o nvme0ns1.

Montar el sistema de ficheros rw

mount -u -o rw /

Averiguar cómo se llama el disco ahora geom disk list o camcontrol devlist.

geom disk list                                    
Geom name: ada0
Providers:
1. Name: ada0
   Mediasize: 250059350016 (233G)
   Sectorsize: 512
   Mode: r3w3e7
   descr: WDC WDS250G2B0A-00SM50
   lunid: 5001b448b8a2a91f
   ident: 192686806761
   rotationrate: 0
   fwsectors: 63
   fwheads: 16

Cambiar la línea de swap, por ejemplo

/dev/da0p3  none   swap  sw   0   0
 por
/dev/ada0p3  none   swap  sw   0   0

Mejor aún, usar la etiqueta (label) GPT que es independiente del nombre del dispositivo

gpart show -l ada0
=>       40  488397088  ada0  GPT  (233G)
         40     532480     1  efiboot0  (260M)
     532520       1024     2  gptboot0  (512K)
     533544        984        - free -  (492K)
     534528   16777216     3  swap0  (8.0G)
   17311744  471085056     4  zroot-new  (225G)
  488396800        328        - free -  (164K)
ls /dev/gpt/
efiboot0 gptboot0 swap0

En el archivo /etc/fstab usar la etiqueta en lugar del dispositivo

...
/dev/gpt/swap0	  none	  swap	  sw	 0	0
...

Error 2

Import of zpool cache /etc/zfs/zpool.cache failed

El zpool.cache fue generado cuando el pool se llamaba zroot-new y estaba en da0. Ahora el pool se llama zroot y el dispositivo cambió. El caché está obsoleto.

Sencillamente borrarlo, ZFS lo regenera automáticamente

rm /etc/zfs/zpool.cache

Antes de reiniciar para verificar el nombre correcto del dispositivo

swapinfo -h
Device              Size     Used    Avail Capacity
/dev/gpt/swap0      8.0G       0B     8.0G     0%

Si el sistema arrancó pero con errores no críticos Ambos errores no impiden el funcionamiento del sistema. El swap simplemente no está activo hasta que corrijas el fstab, y el zpool.cache se regenera solo. Si llegaste al prompt de login, la migración fue exitosa.

Reiniciar

shutdown -r now

Error 3.

Can't open /dev/gpt/efiboot0

Ese error indica que el bootloader está buscando la partición EFI por su label GPT (efiboot0) pero no la encuentra, probablemente porque el label en el disco nuevo es diferente o no se asignó correctamente

ls /dev/gpt
efiboot0 gptboot0 swap0

Montar el sistema de ficheros rw

mount -u -o rw /

Solución. Renombrar el label al esperado

...
/dev/gpt/efiboot0    /boot/efi	  msdosfs    rw	   2	2
...

Corregir el label

gpart modify -i 1 -l efiboot0 ada0

Si la partición EFI estaba vacía, reinstalar loader

newfs_msdos -F 32 -c 1 /dev/ada0p1
mount -t msdosfs /dev/ada0p1 /mnt
mkdir -p /mnt/EFI/BOOT
cp /boot/loader.efi /mnt/EFI/BOOT/BOOTX64.EFI

umount /mnt

 

FreeBSD es genial!.

martes, 23 de septiembre de 2025

Supervisar Disco con smartmontools en FreeBSD 14.2

Configurar smartmontools en FreeBSD 14.2 para supervisar el estado de discos SSD y/o nvme y enviar correos mediante DMA usando los servidores de Gmail


Instalar smartmontools

 pkg install smartmontools

Habilitar el servicio smartd para que inicie al arrancar el sistema

 sysrc smartd_enable="YES"

Iniciar servicio

 service smartd start

Identificar el disco SSD

Primero listar los discos disponibles

 smartctl --scan

/dev/da0 -d sat # /dev/da0 [SAT], ATA device
/dev/nvme0 -d nvme # /dev/nvme0, NVMe device

Configurar smartd para monitorear el SSD

Editar el archivo de configuración

 cp /usr/local/etc/smartd.conf.sample /usr/local/etc/smartd.conf

Agregar esta línea para monitorear el SSD y enviar alertas por correo electrónico

 /dev/da0 -d sat -H -l error -l selftest -f -m tucorreo@protonmail.com
Explicación
 -H Comprueba el estado general SMART
 -l error Revisa el log de errores
 -l selftest Revisa el log de autopruebas
 -f Revisa fallos futuros
 -m Dirección de correo para notificaciones

Comprobar que el disco habla con el disco /dev/da0

# smartctl -d sat -a /dev/da0
smartctl 7.5 2025-04-30 r5714 [FreeBSD 14.3-RELEASE-p2 amd64] (local build)
Copyright (C) 2002-25, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Toshiba 2.5" HDD MQ04UBD...
Device Model:     TOSHIBA MQ04UBD200
Serial Number:    Y0JKT0QOT
LU WWN Device Id: 0 000000 000000000
Firmware Version: JT001U
User Capacity:    2,000,398,934,016 bytes [2.00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    5400 rpm
Form Factor:      2.5 inches
Zoned Device:     Device managed zones
Device is:        In smartctl database 7.5/5706
ATA Version is:   ACS-3 T13/2161-D revision 5
SATA Version is:  SATA 3.3, 3.0 Gb/s (current: 3.0 Gb/s)
Local Time is:    Tue Sep 23 15:03:29 2025 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
...

Configurar DMA para enviar correos por Gmail


https://gnulinuxcodigo.blogspot.com/2024/12/freebsd-dma-dragonfly-mail-agent.html

FreeBSD 14.2 usa DMA como agente de correo por defecto.

Probando el envío de correos

echo "Prueba de correo desde FreeBSD" | mail -s "Prueba" tucorreo@protonmail.com

o, otra forma para lograr el mismo resultado

 cat >> mensaje.txt<<EOF
Esto es una prueba de correo desde usando el agente DMA.
EOF

 mail -v -s prueba tucorreo@protonmail.com < mensaje.txt

Verificar el log de DMA

 tail -f /var/log/maillog
...
Sep 19 08:59:00 tormenta dma[dd67.2b6bad248050][86005]: trying remote delivery to smtp.gmail.com [74.125.133.109] pref 0
Sep 19 08:59:00 tormenta dma[dd67.2b6bad248050][86005]: using SMTP authentication for user tucorreo@gmail.com
Sep 19 08:59:01 tormenta dma[dd67.2b6bad248050][86005]:  delivery successful

Para que smartmontools vigile un disco NVMe

Averiguar el nodo del NVMe

 nvmecontrol devlist
 nvme0: CT500P2SSD8
    nvme0ns1 (476940MB)

 ls -l /dev/nvme*
crw-------  1 root wheel 0x33 Sep 20 15:41 /dev/nvme0
crw-------  1 root wheel 0x40 Sep 20 15:41 /dev/nvme0ns1

Comprobar que smartctl habla con el NVMe

 smartctl -d nvme /dev/nvme0ns1 -i

smartctl 7.5 2025-04-30 r5714 [FreeBSD 14.2-RELEASE-p1 amd64] (local build)
Copyright (C) 2002-25, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Number:                       CT500P2SSD8
Serial Number:                      2216E629B1D4
Firmware Version:                   P2CR048
PCI Vendor/Subsystem ID:            0xc0a9
IEEE OUI Identifier:                0x00a075
Total NVM Capacity:                 500,107,862,016 [500 GB]
Unallocated NVM Capacity:           0
Controller ID:                      1
NVMe Version:                       1.3
Number of Namespaces:               1
Namespace 1 Size/Capacity:          500,107,862,016 [500 GB]
Namespace 1 Formatted LBA Size:     512
Namespace 1 IEEE EUI-64:            00a075 61b0000125
Local Time is:                      Fri Sep 19 09:36:00 2025 CEST

Mostrará modelo, serial, versión NVMe, etc.

Crear una entrada específica para el NVMe en /usr/local/etc/smartd.conf

 /dev/nvme0ns1 -d nvme -H -l error -l selftest -f -m tucorreo@protonmail.com -M test

Explicación

 -d nvme - le dice a smartd que use el backend NVMe
 -H - atributo "Health"
 -l error - log de errores
 -l selftest - log de autopruebas 
 -f - predicción de fallos
 -m - destinatario
 -M test - envía un correo de bienvenida al arrancar smartd (útil para verificar).

Contenido del fichero /usr/local/etc/smartd.conf

 sed -e '/^[ ]*#/d' -e '/^$/d' /usr/local/etc/smartd.conf
 
/dev/da0 -d sat -H -l error -l selftest -f -m tucorreo@protonmail.com
/dev/nvme0ns1 -d nvme -H -l error -l selftest -f -m tucorreo@protonmail.com

service smartd restart

En /var/log/daemon.log se verá

 tail -f /var/log/daemon.log 
...
Sep 19 09:55:34 tormenta smartd[87644]: Device: /dev/nvme0, opened
Sep 19 09:55:34 tormenta smartd[87644]: Device: /dev/nvme0, CT500P3SSD8, S/N:2240E6733488, FW:P9CR30A
Sep 19 09:55:34 tormenta smartd[87644]: Device: /dev/nvme0, is SMART capable. Adding to "monitor" list.
Sep 19 09:55:34 tormenta smartd[87644]: Monitoring 1 ATA/SATA, 0 SCSI/SAS and 1 NVMe devices

Arrancar o reiniciar el demonio

 service smartd restart

En /var/log/daemon.log se verá la línea "Device:/dev/nvme0ns1,opened" y si se incluye -M test, un correo inmediato.

Crear el helper de notificación

En FreeBSD el paquete smartmontools no instala helper de notificación; hay que crearlo.

Crear el script que smartd invoca y asegurarse de que llame a /usr/bin/mail smartd siempre ejecuta el script con sh, por lo que la shell personal (csh) no afecta en absoluto.

cat > /usr/local/sbin/smartdnotify-mailout <<'EOF'
#!/bin/sh
# SMARTD_ADDRESS direccion destino
# SMARTD_SUBJECT asunto
# SMARTD_MESSAGE cuerpo del mensaje
exec /usr/bin/mail -s "$SMARTD_SUBJECT" "$SMARTD_ADDRESS" <<EOF_MAIL
$SMARTD_MESSAGE
EOF_MAIL
EOF

Contenido del archivo /usr/local/sbin/smartdnotify-mailout

#!/bin/sh
# SMARTD_ADDRESS direccion destino
# SMARTD_SUBJECT asunto
# SMARTD_MESSAGE cuerpo del mensaje
exec /usr/bin/mail -s "$SMARTD_SUBJECT" "$SMARTD_ADDRESS" <<EOF
$SMARTD_MESSAGE
EOF

Hay que darle permisos de ejecución

chmod 755 /usr/local/sbin/smartdnotify-mailout

Verificar que smartd lo va a usar

grep ^mailout /usr/local/etc/smartd.conf

Si tuviera una línea como

MAILER /usr/local/libexec/smartdnotify

comentarla o borrarla para que smartd use el helper estándar.

Simular las variables que smartd exporta (shell csh)

setenv SMARTD_ADDRESS "tucorreo@protonmail.com"
setenv SMARTD_SUBJECT "SMART alerta"
setenv SMARTD_MESSAGE "Problema en disco detectado"

En csh las variables anteriores sólo existen en esa shell; Cuando smartd arranca como servicio, no las ve.

La solución es asegurarse de que smartd exporte esas variables él mismo

Forzar un correo de prueba

service smartd restart

si smartd ya está corriendo

pkill -USR1 smartd

Verificar la entrega

tail -f /var/log/maillog
...
Sep 21 16:14:42 tormenta dma[8210.32674c848000][49835]: trying remote delivery to smtp.gmail.com [64.233.184.109] pref 0
Sep 21 16:14:43 tormenta dma[f8210.32674c848000][49835]: using SMTP authentication for user tucorreo@gmail.com
Sep 21 16:14:43 tormenta dma[f820e.57c02fa48000][49825]: <tucorreo@protonmail.com> delivery successful
Sep 21 16:14:44 tormenta dma[f8210.32674c848000][49835]: <tucorreo@protonmail.com> delivery successful

El mensaje "SMART daemon startup" llegará a la bandeja de entrada

Comprobaciones

smartd invoca realmente el helper?

Verlo en tiempo real

service smartd stop
smartd -d -c /usr/local/etc/smartd.conf

En otra terminal forzar el envío

pkill -USR1 smartd

En la primera terminal debe aparecer

Executing "/usr/local/sbin/smartdnotify-mailout"

Si no aparece el problema es parseo de smartd.conf (espacio, salto de línea, falta -M test, etc.)

Borrar las variables del shell (no hacen falta), csh

unsetenv SMARTD_SUBJECT SMARTD_MESSAGE SMARTD_ADDRESS

No se necesita setenv en ningún fichero. Reiniciar smartd con service smartd restart y el demonio exportará las variables antes de llamar al helper.

Ahora ya se puede quitar -M test de ambas líneas cuando ya no se desee recibir el correo de bienvenida cada vez que reinicie smartd

-M test sólo fuerza el envío de un aviso al arrancar el demonio. No afecta a las alertas reales; esas se mandan siempre cuando ocurran.

A partir de ahora no se recibirá el mail "SMART daemon startup". Sí recibirás cualquier alerta real cuando smartd la detecte.

Verificar el estado actual y forzar una alerta en cualquier momento sin reiniciar el servicio.

Lectura rápida en caliente (sin detener smartd)

 smartctl -d nvme -A /dev/nvme0ns1
 smartctl -d nvme -H /dev/nvme0ns1
 smartctl -d nvme -l /dev/nvme0
 smartctl -d sat -A /dev/da0
 smartctl -d sat -H  /dev/da0
 smartctl -d sat -l error /dev/da0

Forzar un evento para comprobar que las alertas siguen funcionando

 kill -USR1 $(pgrep smartd) # sh
 kill -USR1 `pgrep smartd` # csh

Ver que está vigilando smartd en este momento

 tail -f /var/log/daemon.log | grep smartd

Cada 30 minutos, que es el valor por defecto, vuelve a comprobar y registrará cualquier cambio.

Mensajes recibidos en mi correo (uno por cada disco)


Primer mensaje

This message was generated by the smartd daemon running on:

   host name:  tormenta
   DNS domain: [Empty]

The following warning/error was logged by the smartd daemon:

TEST EMAIL from smartd for device: /dev/da0 [SAT]

Device info:
TOSHIBA MQ04UBD200, S/N:Y0JKT0QOT, WWN:0-000000-000000000, FW:JT001U, 2.00 TB

For details see host's SYSLOG.

Segundo mensaje

This message was generated by the smartd daemon running on:

   host name:  tormenta
   DNS domain: [Empty]

The following warning/error was logged by the smartd daemon:

TEST EMAIL from smartd for device: /dev/nvme0ns1

Device info:
CT500P3SSD8, S/N:2240E6733488, FW:P9CR30A, NSID:1

For details see host's SYSLOG.
FreeBSD es genial!.

martes, 25 de marzo de 2025

Crear Particiones en Disco Duro USB Sistema de Archivos ZFS con gpart en FreeBSD 14

# Identificar el disco USB

Primero, verifica el nombre del disco USB conectado:

 gpart show

O también:

 camcontrol devlist

El disco USB generalmente aparecerá como daX (por ejemplo: da0).


# Eliminar particiones existentes (si es necesario)

Si el disco ya tiene particiones, puedes limpiarlo con:

 gpart destroy -F /dev/daX

(Reemplaza daX con tu dispositivo, como da0).


# Crear tabla de particiones (GPT)

Crea una tabla de particiones GPT en el disco:

 gpart create -s GPT /dev/daX

# Crear partición para ZFS

Crea una partición que ocupe todo el disco (o el espacio deseado):

 gpart add -t freebsd-zfs -a 1M -l ZFSBACKUP /dev/daX

-t freebsd-zfs: Tipo de partición para ZFS.
-a 1M: Alineación a 1 MiB (mejor rendimiento en discos modernos).
-l ZFSBACKUP`: Etiqueta de la partición (opcional pero útil para identificación).

# Verificar la partición creada

 gpart show /dev/daX

Deberías ver algo como:

=>   40  625142368  da0  GPT  (298G)
     40  625142368    1  freebsd-zfs  (298G)  [ZFSBACKUP]

# Crear el pool ZFS en la partición

Ahora crea un pool ZFS en la partición (no en el disco completo, `/dev/daX`, sino en la partición, /dev/daXp1 o /dev/gpt/ZFSBACKUP si usaste etiqueta):

 zpool create -f zbackup /dev/gpt/ZFSBACKUP

- zbackup: Nombre del pool (cámbialo si lo prefieres).
- f Fuerza la creación si hay restos de particiones anteriores.

# Configurar propiedades del pool (opcional)

Para mejorar la compatibilidad y rendimiento:

 zfs set mountpoint=none zbackup
 zpool set autoexpand=on zbackup
 zpool set listsnapshots=on zbackup

# Habilitar compresión (recomendado)

 zfs set compression=lz4 zbackup

# Verificar el pool ZFS

 zpool status

zfs list

# Enviar instantáneas (snapshots) al disco USB

Desde el sistema origen (donde está el ZFS con los datos), usa zfs send y zfs receive:


# En el sistema origen:

zfs snapshot pool/dataset@backup1
zfs send pool/dataset@backup1 | zfs receive zbackup/dataset

Si el disco está conectado a otro sistema, usa ssh:

 zfs send pool/dataset@backup1 | ssh user@host "zfs receive zbackup/dataset"

# Notas importantes:

USB y ZFS: ZFS en discos USB puede ser lento y no es ideal para uso intensivo. Se recomienda usar discos con conexión SATA o NVMe si es posible.
- Montaje automático: Si deseas que el pool se monte al conectar el disco, agrega zfs_enable="YES" en /etc/rc.conf.
- Exportar el pool: Antes de desconectar el disco, ejecuta:

 zpool export zbackup

Esto asegura que el pool se cierre correctamente y se liberen todos los recursos asociados. Luego, el disco puede ser desconectado de forma segura.

¡Listo! Ahora tienes un disco USB con ZFS listo para recibir snapshots de FreeBSD.

 

FreeBSD es genial!.

martes, 19 de octubre de 2021

ZFS Local Replication en FreeBSD

Disco ZFS Local Send Receive Snapshots en FreeBSD La replicación de ZFS consta de dos partes: zfs send que serializa una instantánea o una serie de instantáneas en un flujo de datos mezclado, y zfs receive, que convierte ese flujo en un sistema de archivos ZFS. La replicación basada en instantáneas significa que puede hacer una replicación incremental, enviando sólo los bloques que han cambiado; los mismos datos nunca se envían dos veces. El conjunto de datos ZFS transmitido es totalmente coherente, a diferencia del volcado o rsyncing de un sistema de archivos en vivo. Crear un punto de montaje # mkdir /mnt/zbackupsConectar la unidad usb # lsblk

 DEVICE         MAJ:MIN SIZE TYPE                          LABEL MOUNT
ada0             0:96  112G GPT                               - -
  ada0p1         0:97  260M efi                          gpt/efiboot0 /boot/efi
  ada0p2         0:98  512K freebsd-boot                 gpt/gptboot0 -
  free         -:-   492K -                                       - -
  ada0p3         0:99  2.0G freebsd-swap                    gpt/swap0 SWAP
  ada0p3.eli     0:93  2.0G freebsd-swap                           - SWAP
  ada0p4         0:100 110G freebsd-zfs                      gpt/zfs0 zfs
  free         -:-   452K -                                       - -
da0              1:164 932G GPT                               - -
  da0p1          1:166 932G freebsd-zfs                             - zfs

# geom disk list

Geom name: ada0
Providers:
1. Name: ada0
   Mediasize: 120034123776 (112G)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r3w3e6
   descr: Samsung SSD 850 EVO 120GB
   lunid: 5002538d4010a7f6
   ident: S21UNXAG517311N
   rotationrate: 0
   fwsectors: 63
   fwheads: 16

Geom name: da0
Providers:
1. Name: da0
   Mediasize: 1000204886016 (932G)
   Sectorsize: 512
   Stripesize: 4096
   Stripeoffset: 0
   Mode: r0w0e0
   descr: HGST HTS 541010A9E680
   lunname: HGST HTS541010A9E680    160324JD1042ZF1J
   lunid: 3016032414104216
   ident: 160324A41042A61A4543
   rotationrate: unknown
   fwsectors: 63
   fwheads: 255

Particionar el disco externo. Esta es una operación destructiva e irreversible

# gpart destroy -F da0 
  # gpart create -s gpt da0
  da0 created 
  # gpart add -t freebsd-zfs -s 900G -l zbackups da0
  da0p1 added 
  # gpart show da0
=>        40  1953525088  da0  GPT  (932G)
          40  1887436800    1  freebsd-zfs  (900G)
  1887436840    66088288       - free -  (32G)

gpart show -p da0
=>        40  1953525088    da0  GPT  (932G)
          40  1887436800  da0p1  freebsd-zfs  (900G)
  1887436840    66088288         - free -  (32G)

# zpool create zbackups da0p1

Establecer el punto de montaje

# zfs set mountpoint=/mnt/zbackups zbackups

Crear conjunto de datos (dataset) en la unidad zbackups - los puntos de montaje se crean automáticamente.

# zfs create zbackups/carlos
# zfs create zbackups/vm
# zfs create zbackups/vm/alpine
# zfs create zbackups/vm/arch
# zfs create zbackups/vm/freebsd
# zfs list

NAME                           USED  AVAIL     REFER  MOUNTPOINT
zbackups                      1.02M   868G       96K  /mnt/zbackups
zbackups/carlos                104K   868G      104K  /mnt/zbackups/carlos
zbackups/vm                    384K   868G       96K  /mnt/zbackups/vm
zbackups/vm/alpine              96K   868G       96K  /mnt/zbackups/vm/alpine
zbackups/vm/arch                96K   868G       96K  /mnt/zbackups/vm/arch
zbackups/vm/freebsd             96K   868G       96K  /mnt/zbackups/vm/freebsd
...

Listar snapshot

# zfs list -t snapshot

Enviar el conjunto de datos del directorio personal a la unidad externa zbackups.

Primero crear la instantánea para después enviar

(snap_`date +%d%m%y%H%M`)
zfs snapshot zroot/usr/home@/carlos@snap_`date +%d%m%y%H%M`
# zfs snapshot zroot/usr/home/carlos@snap_1910211203

Enviar el conjunto de datos a zbackups/carlos

# zfs send -v zroot/usr/home/carlos@snap_1910211203 | zfs receive -F \ 
zbackups/carlos

# zfs snapshot zroot/vm@snap_1910211203

# zfs send -v zroot/vm@snap_1910211203 | zfs receive -F zbackups/vm

# zfs snapshot zroot/vm/alpine@snap_1910211203

# zfs send -v zroot/vm/alpine@snap_1910211203 | zfs receive -F \ 
zbackups/vm/alpine

# zfs snapshot zroot/vm/arch@snap_1910211203

# zfs send -v zroot/vm/arch@snap_1910211203 | zfs receive -F zbackups/vm/arch

# zfs snapshot zroot/vm/freebsd-12-2@snap_1910211203
# zfs snapshot zroot/vm/freebsd-12-2/disk1@snap_1910211203

# zfs send -Rv zroot/vm/freebsd-12-2@snap_1910211203 | zfs receive \
-F zbackups/vm/freebsd

snapshot del pool completo zroot

# zfs snapshot -r zroot@snap1_021121

Crear dataset zbackups

# zfs create zbackups/snap1full

Enviar recursivamente las snpashots

# zfs send -vR zroot@snap_021121 | zfs receive zbackups/snap1full

Los conjuntos de datos de las instantáneas recibidas deben estar impecables para que los zfs reciban aceptar actualizaciones incrementales o diferenciales. La bandera -F le dice a zfs Receive que revierte cualquier cambio que impida aceptar esto instantánea.

# zfs send -vR zroot@snap_021121 | zfs receive -F zbackups/snap1full 
# grc zfs list -t all -r zbackups

Instantáneas incrementales

Crear las instantánea(s)
# zfs snapshot zroot/usr/home/carlos@snap_20102112020

Enviar instantáneas incrementales.

# zfs send -i zroot/usr/home/carlos@snap_1910211203 \ 
zroot/usr/home/carlos@snap_20102112020 | zfs receive \ 
-F zbackups/carlos

% smartctl -a /dev/ada0

smartctl 7.2 2020-12-30 r5155 [FreeBSD 13.0-RELEASE-p4 amd64] (local build)
Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Samsung based SSDs
Device Model:     Samsung SSD 850 EVO 120GB
Serial Number:    S21UNXAG517311N
LU WWN Device Id: 5 002538 d4010a7f6
Firmware Version: EMT01B6Q
User Capacity:    120.034.123.776 bytes [120 GB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    Solid State Device
TRIM Command:     Available
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ACS-2, ATA8-ACS T13/1699-D revision 4c
SATA Version is:  SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Wed Oct 20 00:00:26 2021 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
...

% smartctl -a /dev/da0
martctl 7.2 2020-12-30 r5155 [FreeBSD 13.0-RELEASE-p4 amd64] (local build)
Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     HGST Travelstar 5K1000
Device Model:     HGST HTS541010A9E680
Serial Number:    160324JD1042ZF1J45DS
LU WWN Device Id: 5 000cca 887d56d1c
Firmware Version: JA0OA5M0
User Capacity:    1.000.204.886.016 bytes [1,00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    5400 rpm
Form Factor:      2.5 inches
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ATA8-ACS T13/1699-D revision 6
SATA Version is:  SATA 2.6, 3.0 Gb/s (current: 3.0 Gb/s)
Local Time is:    Wed Oct 20 00:02:24 2021 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART Status not supported: Incomplete response, ATA output registers missing
SMART overall-health self-assessment test result: PASSED
...
FreeBSD es genial!.

lunes, 24 de junio de 2019

Copiar restaurar particiones Linux


Instalar Arch Linux UEFI

Iniciar el sistema desde un usb live Sytem Rescue con soporte UEFI


lsblk lista información a cerca de todos los dispositivos de bloques disponibles


# lsblk

root@sysresccd /root % lsblk 

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT

sda      8:0    0  55.9G  0 disk 

├─sda1   8:1    0   512M  0 part 

├─sda2   8:2    0    30G  0 part 

└─sda3   8:3    0  25.4G  0 part 

sdb      8:16   0 465.8G  0 disk 

└─sdb1   8:17   0 211.5G  0 part 

sdc      8:32   1   1.9G  0 disk 

└─sdc1   8:33   1   1.9G  0 part /livemnt/boot

loop0    7:0    0 317.1M  1 loop /livemnt/squashfs

lsblk con la opción -f devuelve información sobre sistemas de archivos

# lsblk -f

NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT

sda                                                                   

├─sda1 vfat    CC3A-1EDB 

├─sda2  ext4    38b21575-cd76-4ff5-9733-654c1d50f30f   21,4G    22% /

└─sda3  ext4    e9774ab0-2d95-4820-8c1e-d76563970c86     21G    11% /home

sdb                                                                   

└─sdb1  vfat  SYSRCD-4_5_ 6843-DF82    /livemnt/boot

sdc                                                                

└─sdc1  ext4 ArchlinuxHP   d007c890-2620-44fc-aaeb-5e40f68fa40

loop0  squashfs                                               /livemnt/squashfs 

https://docs.freebsd.org/es/books/handbook/disks/#backup-basics

“No hacer nada” no es un programa, pero es la estrategia de respaldo más extendida. No tiene coste. No hay un calendario de respaldos a seguir. Simplemente hay que decir que no. Si algo le sucediera a sus datos sonría y acostúmbrese a su nueva situación.


Copia de seguridad con tar

Se crea el punto de montaje y se monta en modo rw (lectura y escritura) el disco duro externo donde se guardarán las copias de seguridad en formato tar.gz

root@sysresccd /root % mkdir /mnt/backuprestore
root@sysresccd /root % mount -t ext4 -o rw /dev/sdc1 /mnt/backuprestore

Se crean los puntos de montaje uno para cada partición con nombres que sirvan de referencia.

# mkdir /mnt/archlinuxboot
# mkdir /mnt/archlinuxraiz
# mkdir /mnt/archlinuxhome

Mantar en modo ro (sólo lectura) las particiones del sistema a respaldar

root@sysresccd /mnt % mount -o ro -t vfat /dev/sda1 /mnt/archlinuxboot
root@sysresccd /mnt % mount -o ro -t ext4 /dev/sda2 /mnt/archlinuxraiz
root@sysresccd /mnt % mount -o ro -t ext4 /dev/sda3 /mnt/archlinuxhome

Opciones y argumentos del comando tar
c crea la copia usando tar
v activa el modo verbose para mostrar información por pantalla
z comprime los datos utilizando el formato gzip
p preserva los permisos de los ficheros (predeterminado para root)
f manda la salida a un fichero en lugar de a la salida estandar
--exclude excluye ficheros y directorios de la copia

Se crea y exporta la variable temporal fecha
root@sysresccd /mnt % FECHA=$(date +%d%m%Y)
root@sysresccd /mnt % export FECHA
root@sysresccd /mnt % env | grep FECHA
FECHA=24062019
root@sysresccd /mnt % echo $FECHA
24062019

Una vez hecho esto se cambia al punto de montaje de la partición raiz (sda2) para realizar la copia.
root@sysresccd /mnt % cd /mnt/archlinuxraiz
root@sysresccd /mnt/archlinuxraiz % tar czvf /mnt/backuprestore/Archlinux/archlinuxsda2/archilinuxsda2-$FECHA.tar.gz *

Entrando en el punto de montaje de la partición boot (sda1) para la copia en formato tar.gz utilizando tar
root@sysresccd /mnt % cd /mnt/archlinuxboot
root@sysresccd /mnt/archlinuxboot % tar czvf /mnt/backuprestore/Archlinux/archlinuxsda1/archilinuxsda1-$FECHA.tar.gz *

Por último lo mismo para home (sda3)

root@sysresccd /mnt % cd /mnt/archlinuxhome
root@sysresccd /mnt/archlinuxraiz % tar czvf /mnt/backuprestore/Archlinux/archlinuxsda3/archilinuxsda3-$FECHA.tar.gz --exclude=lost+found *

Restaurar particiones

Iniciar un live usb System Rescue con soporte UEFI

Crear el punto de montaje y montar en modo ro (sólo lectura) la partición que contiene el o los archivos comprimidos a restaurar

# mkdir /mnt/backuprestore
# mount -t ext4 -o ro /dev/sdb1 /mnt/backuprestore

Restaurar la partición raiz

Formatear la partición a restaurar (se perderan todos los datos)
# mkfs.ext4 /dev/sda2

Crear el punto de montaje y montar en modo rw (lectura y escritura) la partición a restaurar

# mkdir /mnt/archraiz
# mount -t ext4 -o rw /dev/sda2 /mnt/archraiz

Entrar en la partición sda2
# cd /mnt/archraiz

Extraer el archivo (no olvide el punto final)
# tar xvzf /mnt/backuprestore/Archlinux/archlinuxsda2/archilinuxsda2-24062019.tar.gz .

Restaurar partición boot (sda1)

Formatear la partición a restaurar (se perderan todos los datos)
# mkfs.vfat /dev/sda1

Crear el punto de montaje y montar en modo rw (lectura y escritura) la partición a restaurar
# mkdir /mnt/archboot
# mount -t vfat -o rw /dev/sda1 /mnt/archboot

Entrar en la partición sda1
# cd /mnt/archboot

Extraer el archivo

# tar xvzf /mnt/backuprestore/Archlinux/archlinuxsda1/archilinuxsda1-24062019.tar.gz .

Restaurar partición home

Formatear la partición a restaurar (se perderan todos los datos)
# mkfs.ext4 /dev/sda3

Crear el punto de montaje y montar en modo rw (lectura y escritura) la partición a restaurar
# mkdir /mnt/archhome
# mount -t ext4 -o rw /dev/sda3 /mnt/archhome

Entrando en la partición sda3

# cd /mnt/archraiz

Extraer el archivo
# tar xvzf /mnt/backuprestore/Archlinux/archlinuxsda3/archilinuxsda3-24062019.tar.gz . 

Finalmente desmontar las particiones

# cd
# umount /mnt/archraiz
# umount /mnt/archboot
# umount /mnt/archhome
# umount /mnt/backuprestore

O desmontar recursivamente.
La relación entre los puntos de montaje está determinada por /proc/self/mountinfo. El sistema de archivos debe ser especificado por la ruta del punto de montaje. Un recursivo desmontado por el nombre del dispositivo o UUID es incompatible.

# umount -R /mnt/*

Reiniciar el sistema
# reboot

OpenBSD es genial!.

viernes, 16 de febrero de 2018

VPN PIA en Aldos

Instalar Aldos - Joel Barrios de Alcance Libre


Un sistema operativo con escritorio Mate por defecto y soporte para xfce4. Es ideal para portátiles o pc de escritorio. Para comprobar la compatibilidad con su máquina puede iniciar desde el liveusb. Excelente sistema, con soporte hasta el 2024. Felicidades a los desarrolladores.


Al finalizar la instalación del sistema reinicie e introduzca la contraseña o frase de paso, utilizada durante la instalación para descifrar el disco y continuar cargando el sistema.

Configuración correcta para un disco duro ssd:

# echo "noop" > /sys/block/sda/queue/scheduler

Los cambios se perderán después de un reinicio. Para hacerlos definitivo edite el archivo /boot/grub/menu.lst y al final de quiet añadir elevator=noop

# vim /boot/grub/menu.lst


Virtual Private Network en Aldos (Centos)

Tunel VPN - Private Internet Access

Instalar openvpn

# yum -y install openvpn

Crear el directorio
# mkdir -p /etc/private-internet-access
# cd /etc/private-internet-access

Descargar el archivo openvpn.zip

# wget https://www.privateinternetaccess.com/openvpn/openvpn.zip
# unzip openvpn.zip

Copiar los archivos necesarios

# mkdir /etc/openvpn/
# cd /etc/openvpn/
# cp /etc/private-internet-access/ca.rsa.2048.crt . # no olvide el punto final
# cp /etc/private-internet-access/crl.rsa.2048.pem .

El archivo que contiene el nombre de usuario y contraseña de suministrado por el proveedor VPN PIA

# touch password.conf
# vi password.conf
username
password

# chown root:root /etc/openvpn/password.conf
# chmod 600 /etc/openvpn/password.conf

Archivo de configuración PIA

# cp /etc/private-internet-access/France.ovpn /etc/openvpn/pia_vpn.con
# nano /etc/openvpn/pia_vpn.conf


client
dev tun
proto udp4
remote france.privateinternetaccess.com 1198
resolv-retry infinite
nobind
persist-key
persist-tun
cipher aes-128-cbc
auth sha1
tls-client
remote-cert-tls server
auth-user-pass
comp-lzo
verb 1
reneg-sec 0
crl-verify /etc/openvpn/crl.rsa.2048.pem
ca /etc/openvpn/ca.rsa.2048.crt
disable-occ
auth-user-pass /etc/openvpn/password.conf
auth-nocache

Habilitar openvpn junto con el arranque del sistema
# chkconfig --add openvpn

Para deshabilitar
# chkconfig openvpn off

Lo dejamos hablitado
#chkconfig openvpn on

Cambios necesarios en el script de inicio de opnvpn

El script de inicio /etc/init.d/openvpn indica el directorio de trabajo por defecto  /etc/openvpn/. Deberá cambiar la ruta si sus archivos residen en otro directorio.

# cp /etc/init.d/openvpn /etc/init.d/openvpn-orig

# vim /etc/init.d/openvpn
work=/etc/openvpn/


Iniciar el servicio
# service openvpn start > /dev/null 2>&1 &

También el script de inicio se puede alterar para que ignore el archivo password.conf al iniciar los servicios:

for c in `/bin/ls *.conf 2>/dev/null`; do
for c in `/bin/ls *.conf 2>/dev/null|grep -v password.conf`; do




Aldos es genial!.

domingo, 30 de abril de 2017

Instalar FreeBSD 11 Xfce PF

FreeBSD como sistema operativo, escritorio xfce4 y pf


Instalar FreeBSD https://www.freebsd.org/

Disco duro Intel SSD 60Gb

He añadido a continuación algunos puntos de referencia

# diskinfo -c -t -v ada0

ada0
 512          # sectorsize
 60022480896  # mediasize in bytes (56G)
 117231408    # mediasize in sectors
 0            # stripesize
 0            # stripeoffset
 116301       # Cylinders according to firmware.
 16           # Heads according to firmware.
 63           # Sectors according to firmware.
 CVLI2505023Z060K # Disk ident.
 Not_Zoned    # Zone Mode

I/O command overhead:
 time to read 10MB block      0.029355 sec =    0.001 msec/sector
 time to read 20480 sectors   1.160798 sec =    0.057 msec/sector
 calculated command overhead   =    0.055 msec/sector

Seek times:
 Full stroke:   250 iter in   0.037406 sec =    0.150 msec
 Half stroke:   250 iter in   0.039282 sec =    0.157 msec
 Quarter stroke:   500 iter in   0.071750 sec =    0.143 msec
 Short forward:   400 iter in   0.042250 sec =    0.106 msec
 Short backward:   400 iter in   0.031437 sec =    0.079 msec
 Seq outer:  2048 iter in   0.119019 sec =    0.058 msec
 Seq inner:  2048 iter in   0.096423 sec =    0.047 msec
Transfer rates:
 outside:       102400 kbytes in   0.333264 sec =   307264 kbytes/sec
 middle:        102400 kbytes in   0.232805 sec =   439853 kbytes/sec
 inside:        102400 kbytes in   0.230457 sec =   444335 kbytes/sec


# pkg install blogbench
# mkdir /root/BLOG
# cd /root
# blogbench -i 10 -d BLOG


Frequency = 10 secs
Scratch dir = [BLOG]
Spawning 3 writers...
Spawning 1 rewriters...
Spawning 5 commenters...
Spawning 100 readers...
Benchmarking for 10 iterations.
The test will run during 1 minutes.

  Nb blogs   R articles    W articles    R pictures    W pictures    R comments    W comments
        35       139328          1991         79359          1656         72427          5855
        35       172008           248        100568           112        109986          2096
        35       149286           233         88331           109        110745          1615
        35       116916           182         71146            85         86253          2935
        35       113976           394         72354           196         91373          2436
        36       119877           324         78673           183        108347          2535
        36       135859           307         88955           148        121805          3611
        36       146624           268         98854           130        132046           690
        36       141039           211         98031           137        131306          2144
        36       149424           182        105312            88        136755          1132

Final score for writes:            36
Final score for reads :         27401

Actualizar el sistema

# freebsd-update fetch install

src component not installed, skipped
Looking up update.FreeBSD.org mirrors... 4 mirrors found.
Fetching public key from update4.freebsd.org... done.
Fetching metadata signature for 11.0-RELEASE from update4.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 70 patches.....10....20....30....40....50....60....70... done.
Applying patches... done.
...
Installing updates... done.

# pkg install wget

Xorg puede ser instalado como paquete o construir e instalar desde la colección de puertos (ports). Cualquiera de estas instalaciones da como resultado la instalación completa del sistema Xorg. Los paquetes binarios son la mejor opción para la mayoría de los usuarios.

# pkg install xorg

La tarjeta de video, monitor y dispositivos de entrada son automáticamente detectados y no requiere configuración manual.

Agregar usuario al grupo video y wheel. Lea las recomendaciones de seguridad https://www.freebsd.org/doc/es/books/handbook/book.html#securing-freebsd

# pw groupmod video -m carles || pw groupmod wheel -m carles

XFce es un entorno de escritorio basado en el «toolkit» GTK utilizado por GNOME pero es mucho más ligero y está pensado para aquellos que quieran un escritorio sencillo, eficiente y fácil de utlizar y configurar. Visualmente es muy parecido a CDE, que podemos encontrar en sistemas UNIX® comerciales

# pkg install xfce

Paquetes disponibles para instalar
# pkg search xfce4


xfce4-appfinder-4.12.0         Application launcher and finder
xfce4-battery-plugin-1.0.5_4   Battery monitor panel plugin for Xfce4
xfce4-bsdcpufreq-plugin-0.2_1  Displays the current CPU clock frequency in the panel
xfce4-calculator-plugin-0.6.0  Simple calculator for the Xfce panel
xfce4-clipman-plugin-1.4.1     Clipboard manager for the Xfce panel
xfce4-conf-4.12.1              D-Bus-based configuration storage system
xfce4-cpugraph-plugin-1.0.5_4  Graphical representation of the CPU load
xfce4-dashboard-0.6.1          GNOME shell like dashboard for the Xfce desktop
xfce4-datetime-plugin-0.7.0    Datetime panel plugin for the Xfce desktop
xfce4-desktop-4.12.3_2         Xfce's desktop manager
xfce4-dev-tools-4.12.0_1       Xfce development tools
xfce4-dict-plugin-0.7.2        Xfce4 plugin to query different dictionaries
xfce4-diskperf-plugin-2.6.1    Graphical representation of the disk IO
xfce4-embed-plugin-1.6.0       Embed arbitrary windows into the Xfce panel
xfce4-equake-plugin-1.3.8.1    Earthquake monitor plugin for the Xfce panel
xfce4-fsguard-plugin-1.1.0     Panel plugin which displays free space of mountpoint
xfce4-generic-slider-0.0.20100827_7 Slider plugin to adjust and/or monitor any numeric variable
xfce4-genmon-plugin-4.0.0      Generic Monitor Xfce4 panel plugin
xfce4-goodies-4.12             Meta-port for software and artwork from the Xfce4 Goodies Project
xfce4-mailwatch-plugin-1.2.0_8 Mail notification applet for the Xfce panel
xfce4-mixer-4.11.0_3           Volume control for the Xfce desktop
xfce4-mount-plugin-1.1.2       Mount and umount utility for the Xfce4 panel
xfce4-mpc-plugin-0.5.0         Musicpd client plugin for the Xfce panel
xfce4-netload-plugin-1.3.1     Network Load plugin for Xfce4
xfce4-notes-plugin-1.8.1       Notes plugin for the Xfce panel
xfce4-notifyd-0.3.6            Visually-appealing notification daemon for Xfce
xfce4-panel-4.12.1             Xfce's panel
xfce4-power-manager-1.6.0      Power manager for the Xfce Desktop
xfce4-print-4.6.1_14           Print system support for the Xfce Desktop
xfce4-pulseaudio-plugin-0.2.4  Panel plugin for controlling PulseAudio mixer
xfce4-quicklauncher-plugin-1.9.4_17 Quicklauncher plugin for Xfce
xfce4-screenshooter-plugin-1.8.2_2 Application and panel plugin to take screenshots
xfce4-session-4.12.1_3         Xfce's session manager
xfce4-settings-4.12.1          Xfce 4 settings application
xfce4-smartbookmark-plugin-0.5.0 Query search engines from the Xfce panel
xfce4-systemload-plugin-1.2.1  System Load plugin for Xfce4 panel
xfce4-taskmanager-1.2.0_1      Task manager for the Xfce desktop
xfce4-terminal-0.8.4           Terminal emulator for the X windowing system
xfce4-time-out-plugin-1.0.2_1  Timer out plugin for Xfce
xfce4-timer-plugin-1.6.0_1     Timer plugin for Xfce
xfce4-tumbler-0.1.31_5         Thumbnail service for Xfce desktop
xfce4-vala-4.10.3_3            Vala binding for the Xfce core libraries
xfce4-verve-plugin-1.1.0_1     Command line plugin for the Xfce Desktop
xfce4-volumed-0.1.13_2         Volume management daemon for the Xfce desktop
xfce4-volumed-pulse-0.2.2      Volume management daemon for Xfce using PulseAudio
xfce4-wavelan-plugin-0.6.0     Displays various information about a WaveLAN device
xfce4-weather-plugin-0.8.9     Weather plugin for the Xfce panel
xfce4-whiskermenu-plugin-1.7.1 Alternate menu for the Xfce Desktop
xfce4-wm-4.12.3                Xfce's window manager
xfce4-wm-themes-4.10.0_1       Additional themes for xfwm4
xfce4-wmdock-plugin-0.6.0_2    WMdock plugin for Xfce
xfce4-xkb-plugin-0.7.1         Keyboard layout switching plugin for the Xfce panel

# pkg install gnome-icons-faenza
# pkg install numix-theme xfce4-mount-plugin
# pkg install xfce4-xkb-plugin gimp libreoffice firefox gedit
# pkg install xdg-user-dirs

Como usuario normal se crean los directorios de usuario:
$ xdg-user-dirs-update

# echo 'hald_enable="YES"'>>/etc/rc.conf
# echo 'dbus_enable="YES"'>>/etc/rc.conf

Como usuario no privilegiado:
$ echo "exec ck-launch-session dbus-launch --exit-with-session xfce4-session" > ~/.xinitrc


FreeBSD 14.3 ZFS XFCE + LightDM 

Editar /usr/local/etc/lightdm/lightdm.conf

Añadir o modificar en la sección [Seat:*]:

[Seat:*]
session-wrapper=/usr/local/bin/ck-launch-session /usr/local/bin/xfce4-session

Guardar y reiniciar

 shutdown -r now

Si usa startx (desde consola tty), modificar ~/.xinitrc:

exec ck-launch-session dbus-launch --exit-with-session xfce4-session

Luego logout y arrancar de nuevo con startx. 
# service hald start
# service dbus start

Español como idioma por defecto:

$ cd
$ ee .login_conf

me:
        :charset=iso-8859-15:
        :lang=es_ES.ISO8859-15:
        :tc=default:

$ ee .profile

LANG=es_ES.ISO8859-15; export LANG
MM_CHARSET=ISO-8859-15; export MM_CHARSET

$ ee .xinitrc

LANG=es_ES.ISO8859-15; export LANG
setenv LANG es_ES.ISO8859-15
 
Iniciar con startx
login:
carles
password
$ startx


Cambiar el tema por defecto:
Aplicaciones>Configuración>Apariencia>Estilo>Numix

Utilizar el gestor de ventanas Numix
Aplicaciones>Gestor de ventanas>Numix

Kernel Mode settings (KMS) - handbook FreeBSD

Cuando la computadora cambia de mostrar la consola a una resolución de pantalla más alta para X, debe configurar el modo de salida de vídeo. Las versiones recientes de Xorg utilizan un sistema dentro del kernel para realizar estos cambios de modo más eficientemente. Las versiones anteriores de FreeBSD utilizan sc (4), que no tiene conocimiento del sistema KMS. El resultado final es que después de cerrar X, la consola del sistema está en blanco, aunque todavía está funcionando. La nueva vt (4) consola evita este problema.

Agregar esta linea a /boot/loader.conf
kern.vty=vt

$ echo $SHELL
/bin/sh

Algunos alias útiles:

$ cat .shrc

...
alias ls="ls -FGA"
alias ll="ls -lAG"
alias su="su -m"

su -m :: Deja el ambiente sin modificar. El shell invocado es su shell de inicio de sesión y no se realizan cambios de directorio. Como precaución de seguridad, si el shell del usuario objetivo es un shell no estándar (como se define por getusershell (3)) y el uid real de la persona que llama es distinto de cero, su fallará.

Al iniciar como single-user init le pregunta por el password de root
# ee /etc/ttys

# name  getty  type  status comments
#
# Cambiar secure por insecure
console none   unknown off insecure

Añadir un grupo usando pw

# pw groupadd docent
# pw groupshow docent
docent:*:1003:

El número 1003 en el ejemplo anterior es el ID de grupo del grupo docent.
Ahora mismo docent no tiene miembros, y es por tanto bastante inútil.
Cambiemos eso invitando a axel a formar parte del grupo docent.

Añadir un usuario a un grupo usando pw

# pw groupmod docent -M axel
# pw groupshow docent
docent:*:1003:axel

# cat /etc/fstab

# Device Mountpoint FStype Options Dump Pass#
/dev/ada0p2 /    ufs   rw,noatime 1 1
/dev/ada0p3 none    swap   sw  0 0
fdesc  /dev/fd    fdescfs  rw  0 0
proc  /proc    procfs  rw  0 0
tmpfs  /tmp    tmpfs  rw,mode=01777 0 0
/dev/cd0        /cdrom     cd9660    ro,noauto       0       0

# cat /etc/rc.conf

sendmail_enable="NONE"
hostname="fbsd11.linux.bcn"
#keymap="spanish.iso.kbd"
keymap="es"
#ifconfig_re0="DHCP"
ifconfig_re0="192.168.3.11 netmask 255.255.255.128"
defaultrouter="192.168.3.1"
moused_enable="YES"
ntpd_enable="YES"
ntpd_sync_on_start="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="NO"
dbus_enable="YES"
hald_enable="YES"
openvpn_enable="YES"
openvpn_if="tun"
openvpn_configfile="/usr/local/etc/pia_openvpn/pia_vpn.conf"
pf_enable="YES"
pf_rules="/etc/pf.conf"
pflog_enable="YES"
pflog_logfiles="/var/log/pflog"
# Webcam disable daemon 
webcamd_enable="NO"
powerd_enable="YES"

Iniciar ntpd
# service ntpd start
Starting ntpd.

Puede inhabilitar el pitido (beep) en la terminal tcsh tecleando
# set nobeep 

# Desactivar beep del sistema
# sysctl kern.vt.enable_bell
kern.vt.enable_bell: 1
# sysctl kern.vt.enable_bell=0

Hacer permanente el cambio agregando esta línea al archivo /etc/sysctl.conf
# desactivar beep del sistema
kern.vt.enable_bell=0

Conocer más del diseño del sistema de archivos
# man hier

Quitar permiso de ejecución a Sendmail

# chmod -x /etc/rc.d/sendmail 
# ls -l /etc/rc.d/sendmail 
-r--r--r--  1 root  wheel  6446 29 sept.  2016 /etc/rc.d/sendmail

# service powerd status
powerd is not running.
# service powerd start
Starting powerd.
# service powerd status
powerd is running as pid 1011.

# cat /etc/resolv.conf

# Generated by resolvconf
search unix.bcn
nameserver 192.168.3.1
nameserver 209.222.18.218

# chflags schg /etc/resolv.conf

# ls -lo /etc/resolv.conf
-rw-r--r--  1 root  wheel  schg 92 21 abr.  20:55 /etc/resolv.conf
# chflags noschg /etc/resolv.conf
# ls -lo /etc/resolv.conf
-rw-r--r--  1 root  wheel  - 92 21 abr.  20:55 /etc/resolv.conf

# pkg install findutils

# pkg install firefox
# pkg search firefox
# pkg install firefox-i18n-53.0

Cambiar idioma Firefox

Firefox about:config
Buscar: general.useragent.locale
Nombre de la preferencia    valor de la cadena
general.useragent.locale    es-ES

# pkg search vlc

fpc-libvlc-3.0.2               Free Pascal interface to vlc media player library
npapi-vlc-2.0.6_4              Embeds vlc-player in web-browsers
phonon-vlc-0.9.1               VLC backend for Phonon
qt5-phonon-vlc-0.9.1           VLC backend for Phonon 4 Qt 5
vlc-2.2.4_12,4                 Qt based multimedia player and streaming server
vlc-qt4-2.2.4_12,4             Qt 4 based multimedia player and streaming server

# pkg install vlc npapi-vlc icedtea-web

Túnel VPN. Lo configuramos en un artículo anterior
Configurar PIA VPN FreeBSD

# pkg install openvpn
# cat /usr/local/etc/pia_openvpn/pia_vpn.conf

client
dev tun
proto udp4
remote france.privateinternetaccess.com 1198

FreeBSD 14.3 ZFS XFCE + LightDM 

Editar /usr/local/etc/lightdm/lightdm.conf

Añade o modifica en la sección [Seat:*]:

[Seat:*]
session-wrapper=/usr/local/bin/ck-launch-session /usr/local/bin/xfce4-session

Guardar y reiniciar

 shutdown -r now

Si usa startx (desde consola tty), modificar ~/.xinitrc:

exec ck-launch-session dbus-launch --exit-with-session xfce4-session

Luego logout y arrancar de nuevo con startx. 
resolv-retry infinite nobind persist-key persist-tun cipher aes-128-cbc auth sha1 tls-client remote-cert-tls server auth-user-pass comp-lzo verb 1 reneg-sec 0 crl-verify /usr/local/etc/pia_openvpn/crl.rsa.2048.pem ca /usr/local/etc/pia_openvpn/ca.rsa.2048.crt disable-occ auth-user-pass /usr/local/etc/pia_openvpn/password_pia.txt auth-nocache

# cat /etc/sysctl.conf

# sed -e '/^[ ]*#/d' -e '/^$/d' /etc/sysctl.conf 
kern.ipc.shm_allow_removed=1
vfs.usermount=1
kern.ipc.shmmax=67108864
kern.ipc.shmall=32768
kern.sched.preempt_thresh=120
kern.maxfiles=200000
hw.syscons.bell=0
hw.snd.default_unit=0
kern.logsigexit=0
security.bsd.see_other_uids=0

Firewall para un solo host. Mostrar sin comentarios ni líneas en blanco:

$ sed -e '/^[ ]*#/d' -e '/^$/d' /etc/pf.conf
 
 ext_if="re0"
 icmp_types = "{echoreq, unreach}"
 state_tcp="flags S/SA keep state"
 state_udp="keep state"
  set block-policy drop
  set skip on lo0
  scrub in on $ext_if all fragment reassemble
  block in all
  pass out quick modulate state
  antispoof quick for $ext_if inet
  block in from urpf-failed to any
  block in quick on $ext_if from any to 255.255.255.255
  pass inet proto icmp all icmp-type $icmp_types keep state

# service pf start
# service pflog start

Reporte sobre reglas de filtrado y state

$ pfctl -s rules

scrub in on re0 all fragment reassemble
block drop in all
pass out quick all flags S/SA modulate state
block drop in quick on ! re0 inet from 192.168.3.0/25 to any
block drop in quick inet from 192.168.3.11 to any
block drop in from urpf-failed to any
block drop in quick on re0 inet from any to 255.255.255.255
pass inet proto icmp all icmp-type echoreq keep state
pass inet proto icmp all icmp-type unreach keep state

$ pfctl -s state

all udp 192.168.3.11:36221 -> 108.61.122.156:1198       MULTIPLE:MULTIPLE
all tcp 10.47.10.6:37967 -> 213.138.116.73:80       CLOSING:FIN_WAIT_2
all tcp 10.47.10.6:33762 -> 213.138.116.73:80       CLOSING:FIN_WAIT_2
all tcp 10.47.10.6:47438 -> 213.138.116.73:80       FIN_WAIT_2:FIN_WAIT_2
all tcp 10.47.10.6:20210 -> 213.138.116.73:80       FIN_WAIT_2:FIN_WAIT_2
all tcp 192.168.3.11:20211 -> 192.168.3.1:22       ESTABLISHED:ESTABLISHED
all tcp 10.47.10.6:20192 -> 213.138.116.73:80       TIME_WAIT:TIME_WAIT
all tcp 10.47.10.6:20194 -> 213.138.116.73:80       FIN_WAIT_2:FIN_WAIT_2
all tcp 10.47.10.6:20202 -> 213.138.116.73:80       FIN_WAIT_2:FIN_WAIT_2
all tcp 10.47.10.6:20203 -> 213.138.116.73:80       FIN_WAIT_2:FIN_WAIT_2

$ cat /etc/devfs.rules

[devfsrules_devcom=7]
  add path 'ad[0-9]\*'    mode 666
  add path 'ada[0-9]\*'    mode 666
  add path 'da[0-9]\*'    mode 666
  add path 'acd[0-9]\*'    mode 666
  add path 'cd[0-9]\*'    mode 666
  add path 'mmcsd[0-9]\*'  mode 666
  add path 'pass[0-9]\*'   mode 666
  add path 'xpt[0-9]\*'    mode 666
  add path 'ugen[0-9]\*'   mode 666
  add path 'usbctl'    mode 666
  add path 'usb/\*'    mode 666
  add path 'lpt[0-9]\*'    mode 666
  add path 'ulpt[0-9]\*'   mode 666
  add path 'unlpt[0-9]\*'  mode 666
  add path 'fd[0-9]\*'    mode 666
  add path 'uscan[0-9]\*'  mode 666
  add path 'video[0-9]\*'  mode 666
  add path 'tuner[0-9]*'   mode 666
  add path 'dvb/\*'    mode 666
  add path 'cx88*'     mode 0660
  add path 'cx23885*'     mode 0660
  add path 'iicdev*'     mode 0660
  add path 'uvisor[0-9]*'  mode 0660

$ cat /etc/devfs.conf

# Allow members of group operator to cat things to the speaker
own speaker root:operator
perm speaker 0660

# Allow all users to access optical media
perm    /dev/acd0       0666
perm    /dev/acd1       0666
perm    /dev/cd0        0666
perm    /dev/cd1        0666
     
# Allow all USB Devices to be mounted
perm    /dev/da0        0666
perm    /dev/da1        0666
perm    /dev/da2        0666
perm    /dev/da3        0666
perm    /dev/da4        0666
perm    /dev/da5        0666
     
# Misc other devices
perm    /dev/pass0      0666
perm    /dev/xpt0       0666
perm    /dev/uscanner0  0666
perm    /dev/video0     0666
perm    /dev/tuner0     0666
perm    /dev/dvb/adapter0/demux0    0666
perm    /dev/dvb/adapter0/dvr       0666
perm    /dev/dvb/adapter0/frontend0 0666

# echo 'devfs_system_ruleset="devfsrules_devcom"'>>/etc/rc.conf
# service devfs start

A /etc/periodic.conf añadir:

daily_clean_preserve_enable="NO"
daily_backup_pkgdb_enable="NO"
daily_backup_aliases_enable="NO"
daily_status_security_ipfwdenied_enable="NO"
daily_status_security_ipfdenied_enable="NO"
daily_status_security_chkmounts_enable="NO"
daily_status_security_pfdenied_enable="NO"
weekly_status_pkg_enable="NO"
monthly_accounting_enable="NO"
weekly_locate_enable="NO"
weekly_whatis_enable="NO"
weekly_noid_enable="NO"
daily_status_security_chksetuid_enable="NO"
daily_clean_rwho_enable="NO"
daily_status_security_chkportsum_enable="NO"
daily_status_security_neggrpperm_enable="NO"
monthly_statistics_enable="NO"
monthly_statistics_report_devices="NO"

Averiguar componentes (hardware) tiene su máquina?:

# lshal
# pciconf -lv
# pciconf -l
# dmesg | grep -i usb
# lsvfs
# camcontrol devlist

Cuales controladores de sonido tiene actualmente en uso?

$ dmesg | grep ^hda

$ cat /boot/loader.conf

loader_logo="beastie"
autoboot_delay="2"
kern.ipc.shmseg=1024
kern.ipc.shmmni=1024
kern.maxproc=100000
tmpfs_load="YES"
cuse4bsd_load="NO"
net.inet.tcp.hostcache.cachelimit=0
net.link.ifqmaxlen=200
net.inet.tcp.soreceive_stream=1
hw.igb.num_queues=2
kern.hz=100
kern.vty=vt

# gpart show ada0

=>       40  117231328  ada0  GPT  (56G)
         40       1024     1  freebsd-boot  (512K)
       1064  111148032     2  freebsd-ufs  (53G)
  111149096    5861376     3  freebsd-swap  (2.8G)
  117010472     220896        - free -  (108M)

Eliminar usuario toor
# vipw
toor...
...
:q!
vipw: password list updated


https://www.bsdnow.tv/tutorials/the-desktop
https://www.freebsd.org/doc/handbook/firewalls-pf.html

FreeBSD es genial!.