{"id":2566,"date":"2025-12-01T20:52:57","date_gmt":"2025-12-01T20:52:57","guid":{"rendered":"https:\/\/garikoitz.info\/blog\/?p=2566"},"modified":"2025-12-01T20:52:58","modified_gmt":"2025-12-01T20:52:58","slug":"de-un-vps-comercial-al-salon-de-casa-parte-4-copia-de-seguridad","status":"publish","type":"post","link":"https:\/\/garikoitz.info\/blog\/2025\/12\/de-un-vps-comercial-al-salon-de-casa-parte-4-copia-de-seguridad\/","title":{"rendered":"De un VPS comercial al sal\u00f3n de casa. Parte 4 &#8211; Copia de seguridad"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">He dividido la copia de seguridad en dos partes. La primera comprende una copia de las carpetas donde se encuentra el contenido de las webs y las bases de datos. La segundo consiste en crear una imagen completa de la tarjeta MicroSD.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Depende de vuestro caso particular es posible que mi soluci\u00f3n no os valga y teng\u00e1is que buscar alguna alternativa para la primera parte o simplemente descartarla. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mi situaci\u00f3n parte de que tengo un disco <a href=\"https:\/\/es.wikipedia.org\/wiki\/Almacenamiento_conectado_en_red\" target=\"_blank\" rel=\"noreferrer noopener\">NAS<\/a> con <a href=\"https:\/\/openwrt.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">OpenWRT<\/a> lo que me permite configurar una carpeta para mi copia de seguridad del server de forma muy sencilla.<\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u00cdndice<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Alternar tabla de contenidos\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/garikoitz.info\/blog\/2025\/12\/de-un-vps-comercial-al-salon-de-casa-parte-4-copia-de-seguridad\/#Primera_parte\" >Primera parte<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/garikoitz.info\/blog\/2025\/12\/de-un-vps-comercial-al-salon-de-casa-parte-4-copia-de-seguridad\/#Configuracion_en_el_NAS\" >Configuraci\u00f3n en el NAS<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/garikoitz.info\/blog\/2025\/12\/de-un-vps-comercial-al-salon-de-casa-parte-4-copia-de-seguridad\/#Configuracion_en_la_Raspi\" >Configuraci\u00f3n en la Raspi<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/garikoitz.info\/blog\/2025\/12\/de-un-vps-comercial-al-salon-de-casa-parte-4-copia-de-seguridad\/#Diagnostico_y_comprobaciones\" >Diagn\u00f3stico y comprobaciones<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/garikoitz.info\/blog\/2025\/12\/de-un-vps-comercial-al-salon-de-casa-parte-4-copia-de-seguridad\/#Comandos_de_recuperacion_ante_fallo_de_la_copia\" >Comandos de recuperaci\u00f3n ante fallo de la copia<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/garikoitz.info\/blog\/2025\/12\/de-un-vps-comercial-al-salon-de-casa-parte-4-copia-de-seguridad\/#Restaurar_desde_la_copia_de_seguridad\" >Restaurar desde la copia de seguridad<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/garikoitz.info\/blog\/2025\/12\/de-un-vps-comercial-al-salon-de-casa-parte-4-copia-de-seguridad\/#Segunda_parte\" >Segunda parte<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Primera_parte\"><\/span>Primera parte<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">                     \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n                     \u2502        Red LAN          \u2502\n                     \u2502     192.168.2.0\/24      \u2502\n                     \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n                                 \u2502\n        \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n        \u2502                                                 \u2502\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                     \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502    Raspberry Pi       \u2502                     \u2502      NAS OpenWrt       \u2502\n\u2502   192.168.2.160       \u2502                     \u2502     192.168.2.150      \u2502\n\u2502                       \u2502                     \u2502                        \u2502\n\u2502  Debian Bookworm      \u2502                     \u2502  OpenWrt 22.x          \u2502\n\u2502                       \u2502                     \u2502                        \u2502\n\u2502  Servicios activos    \u2502                     \u2502  Disco USB \/ SATA      \u2502\n\u2502  - nginx              \u2502                     \u2502  \/dev\/sda3 1.8T        \u2502\n\u2502  - php-fpm            \u2502                     \u2502                        \u2502\n\u2502  - bases de datos     \u2502                     \u2502  Montaje real          \u2502\n\u2502                       \u2502                     \u2502  \/mnt\/sda\/backupRPI    \u2502\n\u2502  Script backup        \u2502                     \u2502                        \u2502\n\u2502  \/usr\/local\/bin\/      \u2502                     \u2502  Bind mount            \u2502\n\u2502  backup_raspi.sh      \u2502                     \u2502  \/backupRPI -> \/mnt\/sda\u2502\n\u2502                       \u2502                     \u2502                        \u2502\n\u2502  Punto NFS            \u2502   NFSv4             \u2502  Export NFS            \u2502\n\u2502  \/mnt\/backupRPI \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25ba           \u2502  \/backupRPI            \u2502\n\u2502                       \u2502                     \u2502                        \u2502\n\u2502  rsync (nice+ionice)  \u2502                     \u2502  FS ext4               \u2502\n\u2502                       \u2502                     \u2502                        \u2502\n\u2502  Backup resultante    \u2502                     \u2502  Datos almacenados     \u2502\n\u2502  \/etc                 \u2502                     \u2502  current\/              \u2502\n\u2502  \/var                 \u2502                     \u2502  snapshot_YYYY-MM-DD   \u2502\n\u2502  \/home                \u2502                     \u2502                        \u2502\n\u2502  \/boot\/firmware       \u2502                     \u2502                        \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                     \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Configuracion_en_el_NAS\"><\/span>Configuraci\u00f3n en el NAS<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"md\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Ver todos los discos y comprobar el disco grande\ndf -h\n\n# Crear carpeta real de backups en el disco grande\nmkdir -p \/mnt\/sda\/backupRPI\n\n# Ajustar permisos para que la Raspberry pueda escribir\nchown -R 1000:1000 \/mnt\/sda\/backupRPI\nchmod 775 \/mnt\/sda\/backupRPI\n\n# Crear punto exportado independiente\nrm -rf \/backupRPI\nmkdir \/backupRPI\n\n# Bind mount para que \/backupRPI apunte al disco grande\nnano \/etc\/fstab<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tip: Nano es un editor de archivos desde l\u00ednea de comandos. Siempre que teng\u00e1is que modificar un archivo simplemente pegar el contenido que se indique y a continuaci\u00f3n pulsar CTRL+O seguido de ENTER para guardar y CTRL+X para salir.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"md\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># contenido a pegar en \/etc\/fstab (Guardar y salir de nano)\n\/mnt\/sda\/backupRPI   \/backupRPI   none   bind   0   0\n\n# Aplicar mounts\nmount -a\n\n# Configurar export NFS\nnano \/etc\/exports\n\n# contenido de \/etc\/exports (Guardar y salir de nano)\n\/backupRPI 192.168.2.0\/24(rw,sync,no_subtree_check,no_root_squash)\n\n# Recargar exports NFS\nexportfs -ra\n\/etc\/init.d\/nfsd restart\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Configuracion_en_la_Raspi\"><\/span>Configuraci\u00f3n en la Raspi<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"md\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Crear punto de montaje local\nsudo mkdir -p \/mnt\/backupRPI\n\n# Montar el recurso NFS del NAS\nsudo mount -t nfs 192.168.2.150:\/backupRPI \/mnt\/backupRPI\n\n# Verificar tama\u00f1o correcto del destino (Debe verse el taman\u00f1o real del disco (ej: 1.8T))\ndf -h \/mnt\/backupRPI\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Automatizamos la copia de archivos mediante este script de shell<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"md\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Creamos el script\nsudo nano \/usr\/local\/bin\/backup_raspi.sh<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#!\/bin\/bash\nset -euo pipefail\n\nDEST=\"\/mnt\/backupRPI\"\nMIN_FREE_GB=20\nLOCK=\"\/tmp\/backup_raspi.lock\"\n\nDATE=$(date +%F)\nLOG=\"$DEST\/backup_$DATE.log\"\n\nexec 9>\"$LOCK\" || exit 1\ntrap 'rm -f \"$LOCK\"' EXIT\nflock -n 9 || exit 0\n\nif ! mountpoint -q \"$DEST\"; then\n  logger -t BACKUP_RPI \"ABORTADO: destino no montado\"\n  exit 1\nfi\n\nFSTYPE=$(findmnt -n -o FSTYPE --target \"$DEST\")\nif [[ \"$FSTYPE\" != nfs* ]]; then\n  logger -t BACKUP_RPI \"ABORTADO: destino no es NFS\"\n  exit 1\nfi\n\nFREE_GB=$(df -BG --output=avail \"$DEST\" | tail -1 | tr -dc '0-9')\nif (( FREE_GB &lt; MIN_FREE_GB )); then\n  logger -t BACKUP_RPI \"ABORTADO: espacio insuficiente\"\n  exit 1\nfi\n\nif [[ \"$DEST\" == \"\/\" || \"$DEST\" == \"\/mnt\" || \"$DEST\" == \"\/mnt\/\" ]]; then\n  logger -t BACKUP_RPI \"ABORTADO: destino inseguro\"\n  exit 1\nfi\n\nmkdir -p \"$DEST\/current\"\n\nnice -n 19 ionice -c2 -n7 rsync -a \\\n  --numeric-ids \\\n  --delete \\\n  --info=stats2 \\\n  --no-acls \\\n  --no-xattrs \\\n  --exclude={\"\/proc\/*\",\"\/sys\/*\",\"\/dev\/*\",\"\/run\/*\",\"\/tmp\/*\",\"\/mnt\/*\",\"\/media\/*\",\"\/lost+found\"} \\\n  \/etc \\\n  \/home \\\n  \/var \\\n  \/boot\/firmware \\\n  \"$DEST\/current\" >> \"$LOG\" 2>&amp;1\n\nif [[ \"$(date +%u)\" -eq 7 ]]; then\n  cp -al \"$DEST\/current\" \"$DEST\/snapshot_$DATE\"\nfi\n<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"md\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Permisos\nsudo chmod +x \/usr\/local\/bin\/backup_raspi.sh\n\n# Ejecutar backup manualmente (tarda unos minutos dependiendo del volumen del backup)\nsudo \/usr\/local\/bin\/backup_raspi.sh\n\n# Si el backup ha ido bien lo programamos\n# Editar cron del root\nsudo crontab -e\n\n# Backup diario a las 03:00\n0 3 * * * \/usr\/local\/bin\/backup_raspi.sh<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Diagnostico_y_comprobaciones\"><\/span>Diagn\u00f3stico y comprobaciones<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"md\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Ver mensajes de aborto del script\njournalctl -t BACKUP_RPI\n\n# Ver logs del backup del dia\nls -lh \/mnt\/backupRPI\/backup_$(date +%F).log\ntail -n 20 \/mnt\/backupRPI\/backup_$(date +%F).log\n\n# Ver contenido del backup actual\nls -lh \/mnt\/backupRPI\/current\ndu -sh \/mnt\/backupRPI\/current<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Comandos_de_recuperacion_ante_fallo_de_la_copia\"><\/span>Comandos de recuperaci\u00f3n ante fallo de la copia<span class=\"ez-toc-section-end\"><\/span><\/h4>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"md\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Parar una copia de seguridad colgada\nsudo pkill rsync\n\n# Desmontar NFS de forma segura\nsudo umount -l \/mnt\/backupRPI\n\n# Limpiar lock manualmente (solo si no hay backup activo)\nsudo rm -f \/tmp\/backup_raspi.lock<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Restaurar_desde_la_copia_de_seguridad\"><\/span>Restaurar desde la copia de seguridad<span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Paso<\/th><th>Descripcion<\/th><\/tr><\/thead><tbody><tr><td>Parar servicios<\/td><td>Evitar escrituras<\/td><\/tr><tr><td>Restaurar \/etc<\/td><td>Configuracion<\/td><\/tr><tr><td>Restaurar \/var<\/td><td>Datos<\/td><\/tr><tr><td>Restaurar \/home<\/td><td>Usuarios<\/td><\/tr><tr><td>sync<\/td><td>Vaciar cache<\/td><\/tr><tr><td>reboot<\/td><td>Aplicar cambios<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"md\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Detenemos todo lo que escriba en disco\nsudo systemctl stop nginx\nsudo systemctl stop php8.2-fpm\nsudo systemctl stop mariadb\nsudo systemctl stop postgres\nsudo systemctl stop smbd\nsudo systemctl stop cron\n\n# Restaurar en tres fases\n\n# 1) Restaurar \/etc (restaura usuarios, servicios y configuraciones)\nsudo rsync -a \\\n  --numeric-ids \\\n  \/mnt\/backupRPI\/current\/etc\/ \\\n  \/etc\/\n\n# 2) Restaurar \/var (restaura webs, bases de datos, logs y caches)\nsudo rsync -a \\\n  --numeric-ids \\\n  \/mnt\/backupRPI\/current\/var\/ \\\n  \/var\/\n\n# 3) Restaurar \/home (usuarios)\nsudo rsync -a \\\n  --numeric-ids \\\n  \/mnt\/backupRPI\/current\/home\/ \\\n  \/home\/\n\n# Sincronizar\nsync\n\n# Reiniciar\nsudo reboot\n\n# Comprobar tras el reinicio\nsystemctl status nginx php8.2-fpm\ndf -h\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Segunda_parte\"><\/span>Segunda parte<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Si no dispones de otra m\u00e1quina, el plan B consiste en crear una imagen completa de la tarjeta midroSD de forma manual. Este proceso se puede hacer tanto desde Linux como desde Windows con herramientas como <a href=\"https:\/\/www.raspberrypi.com\/software\/\" target=\"_blank\" rel=\"noreferrer noopener\">Raspberry Pi Imager<\/a>, <a href=\"https:\/\/win32diskimager.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Win32 Disk Imager<\/a> o <a href=\"https:\/\/etcher.balena.io\/#download-etcher\" target=\"_blank\" rel=\"noreferrer noopener\">BalenaEtcher<\/a>. La \u00fanicas pegas son que mientras creas la imagen dejas el servidor fuera de servicio durante unos minutos y que tienes que tener la disciplina para crear la copia semanalmente. Por lo dem\u00e1s, con este m\u00e9todo puedes tener otra microSD gemela preparada ante desastre con un lapsus de datos de 1 semana como m\u00e1ximo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>He dividido la copia de seguridad en dos partes. La primera comprende una copia de las carpetas donde se encuentra el contenido de las webs y las bases de datos. La segundo consiste en crear una imagen completa de la tarjeta MicroSD. Depende de vuestro caso particular es posible que mi soluci&oacute;n no os valga y teng&aacute;is que buscar alguna alternativa para la primera parte o simplemente descartarla. Mi situaci&oacute;n parte de que tengo un disco NAS con OpenWRT lo&#8230;<\/p>\n<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/garikoitz.info\/blog\/2025\/12\/de-un-vps-comercial-al-salon-de-casa-parte-4-copia-de-seguridad\/\"> Leer m\u00e1s<span class=\"screen-reader-text\">  Leer m\u00e1s<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":2573,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","wpupg_custom_link":[],"wpupg_custom_link_behaviour":[],"wpupg_custom_link_nofollow":[],"wpupg_custom_image":[],"wpupg_custom_image_id":[],"footnotes":""},"categories":[55,68],"tags":[248,250,247,188,185,251,249],"class_list":["post-2566","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","category-raspberry-pi","tag-backup","tag-balenaetcher","tag-copia-de-seguridad","tag-nas","tag-openwrt","tag-raspberry-pi-imager","tag-win32-disk-imager"],"_links":{"self":[{"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/posts\/2566","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/comments?post=2566"}],"version-history":[{"count":7,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/posts\/2566\/revisions"}],"predecessor-version":[{"id":2574,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/posts\/2566\/revisions\/2574"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/media\/2573"}],"wp:attachment":[{"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/media?parent=2566"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/categories?post=2566"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/garikoitz.info\/blog\/wp-json\/wp\/v2\/tags?post=2566"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}