Veu Ona al servidor local de deepin

curl -G --data-urlencode "text=Hola, això és una prova. Soc Ona aquesta veu s'ha desenvolupat  a la UPC de Barcelona" http://127.0.0.1:8765/

Pugin Ona server






aquesta genera un .wav al directori /temp

curl -sS -X POST \
  -H 'Content-Type: application/json' \
  -d "{\"text\":\"Hola, això és una prova. Soc Ona, aquesta veu s'ha desenvolupat a la UPC de Barcelona.\"}" \
  http://127.0.0.1:8765/synthesize \
  -o /tmp/ona.wav

Si volem que no generi .wav

curl -sS -X POST \
  -H 'Content-Type: application/json' \
  -d "{\"text\":\"Hola, això és una prova. Soc Ona, aquesta veu s'ha desenvolupat a la UPC de Barcelona.\"}" \
  http://127.0.0.1:8765/synthesize \
  | aplay

Reproduir amb ffplay (si vols més qualitat o control)

curl -sS -X POST \
  -H 'Content-Type: application/json' \
  -d "{\"text\":\"Hola, això és una prova. Soc Ona, aquesta veu s'ha desenvolupat a la UPC de Barcelona.\"}" \
  http://127.0.0.1:8765/synthesize \
  | ffplay -autoexit -

Perfecte! El port 8765 coincideix amb el projecte speech-to-speech, que aixeca un servidor local compatible amb OpenAI Realtime i inclou TTS (Qwen3-TTS) + STT (Parakeet TDT) + LLM. T’ajudo a instal·lar-lo a Deepin.

🔧 Requisits previs

Deepin és Debian-based, així que primer assegura’t de tenir Python i pip:

sudo apt update
sudo apt install python3 python3-pip python3-venv git -y

📦 Instal·lació del servidor TTS

Crea un entorn virtual i instal·la el paquet:

mkdir -p ~/tts-server && cd ~/tts-server
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install speech-to-speech

🚀 Posada en marxa

export OPENAI_API_KEY=...   # opcional, només si faràs servir un LLM en línia
speech-to-speech

Això aixecarà el servidor a ws://127.0.0.1:8765/v1/realtime amb la configuració per defecte:

  • 🎙️ STT local: Parakeet TDT
  • 🧠 LLM: compatible amb OpenAI (pots connectar-hi Ollama, LM Studio, etc.)
  • 🔊 TTS local: Qwen3-TTS

💻 Prova de conversa

En un altre terminal, executa:

cd ~/tts-server
source venv/bin/activate
python scripts/listen_and_play_realtime.py --host 127.0.0.1 --port 8765

🧠 Opció: LLM 100% local (sense claus API)

Si vols que tot sigui local, pots usar llama.cpp amb Gemma:

pip install llama-cpp-python
llama-server -hf ggml-org/gemma-4-... 

💡 Alternatives si només vols TTS pur (sense STT/LLM)

OpcióPortDescripció
Dia-TTS-Server5000git clone https://github.com/devnen/Dia-TTS-Server.git && pip install -r requirements.txt && python main.py
Piper (Docker)10200docker run -d --name piper -p 10200:10200 linuxserver/piper — molt lleuger, ideal per a NAS/rPi

Cap problema! Fem la comprovació pas a pas:

1️⃣ Primer, comprova si el servidor segueix en marxa

En un terminal nou, prova directament:

curl -v http://127.0.0.1:8765/v1/realtime 2>&1 | head -20

Si surt alguna resposta (fins i tot un error 400 o 426 Upgrade Required) → el servidor està funcionant i només cal un client per connectar-s’hi. 🎉

Si surt Could not connect → el servidor es va aturar (potser es va tancar el terminal o es va tallar la descàrrega).


2️⃣ Si el servidor es va aturar, torna a engegar-lo

cd ~/tts-server
source venv/bin/activate
speech-to-speech

💡 Bona notícia: els models que ja es van descarregar queden a la memòria cau (~/.cache/huggingface), així que aquesta vegada serà molt més ràpid — no tornarà a baixar res, només carregarà.


3️⃣ Alternativa: comprova si el port està escoltant

Mentre el servidor estigui en marxa, en un altre terminal:

ss -tlnp | grep 8765

Si surt una línia amb 0.0.0.0:8765 o 127.0.0.1:8765, el servidor està escoltant correctament. ✅


Fes el pas 1 i digue’m què surt — si és Could not connect, passa al pas 2 i enganxa’m el que mostri el servidor en arrencar! 😊

Confirmat: el servidor està aturat (el port 8765 no està escoltant). El que va passar és que probablement es va tancar el terminal on s’executava o es va interrompre.

🔄 Torna a engegar-lo (ara serà ràpid)

Com que els models ja estan a la memòria cau, no tornarà a baixar res:

cd ~/tts-server
source venv/bin/activate
speech-to-speech

Deixa aquest terminal obert i espera a veure el missatge que el servidor està escoltant.


💡 Consell: engega’l en segon pla (així no depens del terminal)

Si no vols tenir un terminal ocupat sempre, pots executar-lo en segon pla:

cd ~/tts-server
source venv/bin/activate
nohup speech-to-speech > server.log 2>&1 &

Després pots comprovar que funciona amb:

ss -tlnp | grep 8765

I veure els logs amb:

tail -f ~/tts-server/server.log

🔍 Si torna a no engegar, comprova els logs

Si després d’executar speech-to-speech no veus el missatge d’èxit, enganxa’m les últimes línies que surtin (o el contingut de server.log si fas servir el mètode del segon pla) i ho diagnostiquem. Pot ser que estigui intentant baixar el model TTS (que és gran, ~2-3 GB) i es tallés.

Què diu quan l’executes? 😊

⭐⭐ Automatització de còpies de seguretat MySQL al Synology: backup_beseit.sh

ANom de l’script:
backup_beseit.sh

Què fa:
Aquest script de Bash automatitza la còpia de seguretat (backup) de cinc bases de dades MySQL concretes: beseit, eng, eng_gram, bank i encara_una_mes.
Per a cada base de dades, genera un fitxer .sql independent amb un segell de data i hora al nom (per exemple: beseit_2026-09-08_10-00.sql), evitant així la sobreescriptura de còpies anteriors. Els fitxers es desen a la carpeta /volume2/MySQL_backup/MySQL_beseit.
L’script inclou comprovacions de seguretat prèvies: verifica que la carpeta de destí existeix i comprova la disponibilitat de cada base de dades abans d’intentar-ne la còpia, garantint un procés robust i sense interrupcions.

On està ubicat:
Al sistema de fitxers del servidor NAS Synology, concretament a la ruta:
/usr/local/bin/backup_beseit.sh

Com es llança:

  • Manualment (via terminal/SSH):
    Connectant-se al Synology i executant:
    sudo /usr/local/bin/backup_beseit.sh
  • Automàticament:
    Configurada com una tasca programada al Planificador de tasques del Panell de Control del DSM (Synology), executant-se amb privilegis d’usuari root a la data i hora programades, independentment de si l’ordinador personal està encès o apagat.

Visualitzar.

Entrar al synology: Miquel@Miquel-PC:~$ ssh usuari@192.168.1.41

llistar:

urqtejmi@synology_vall:~$ sudo cat /usr/local/bin/backup_beseit.sh
Password:
Sorry, try again.
Password:
#!/bin/bash

sudo chmod +x /usr/local/bin/backup_polidic.sh

sudo cp /volume2/web/backup_polidic.sh /usr/local/bin/

sudo chmod +x /usr/local/bin/backup_polidic.sh //executa

sudo sed -i ‘s/\r$//’ /usr/local/bin/backup_polidic.sh –> ELIMINA ELS RETORN DE CARRO

sudo chmod +x /usr/local/bin/backup_polidic.sh –> COMPROVA QUE SEGUEIX SENT EXECUTABLE

#!/bin/bash

Llista de bases de dades a copiar

DB_LIST=(«beseit» «eng» «eng_gram» «bank» «encara_una_mes»)

DB_USER=
DB_PASS=
BACKUP_DIR=»/volume2/MySQL_backup/MySQL_beseit»
DATE=$(date +»%Y-%m-%d_%H-%M»)

Comprovar que la carpeta existeix

if [ ! -d «$BACKUP_DIR» ]; then
echo «ERROR: El directori $BACKUP_DIR no existeix.»
exit 1
fi

Bucle per cada base de dades

for DB_NAME in «${DB_LIST[@]}»; do
FILE=»$BACKUP_DIR/${DB_NAME}_$DATE.sql»

echo "Fent backup de la base de dades: $DB_NAME..."

# Comprovar si la base de dades existeix
if ! mysql -u"$DB_USER" -p"$DB_PASS" -e "USE $DB_NAME" 2>/dev/null; then
    echo "⚠  La base de dades $DB_NAME NO existeix. Saltant..."
    continue
fi

# Fer el backup
mysqldump -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$FILE"

if [ $? -eq 0 ]; then
    echo "Backup complet: $FILE"
else
    echo "❌ ERROR durant el backup de $DB_NAME"
fi

done
urqtejmi@synology_vall:~$

USB multiboot amb Ventoy (3 ISOs)

Perfecte! Tens raó que a Windows em perdràs, així que aquí tens la xuleta completa per imprimir 📄. Un apunt abans: per a fer el USB de Ventoy no utilitzaràs Rufus — utilitzaràs el Ventoy2Disk (la versió per a Windows). Rufus només serviria per fer un USB d’instal·lació d’un sol Windows, però no és el teu cas.


📋 XULETA — USB multiboot amb Ventoy (3 ISOs)

PAS 0 — Descarrega-ho tot (a Deepin abans de canviar, o ja a Windows)

QuèOn
Ventoy (Windows)https://www.ventoy.net → Download → ventoy-*-windows.zip
ISO Windows 11 25H2https://www.microsoft.com/software-download/windows11 → 25H2, Español (España)
ISO Deepin 25https://www.deepin.org/en/download/
ISO GPartedhttps://gparted.org/download.php

💡 Consell: deixa les 3 ISOs en una carpeta fàcil de trobar des de Windows (ex: C:\ISOs). Si les baixes a Deepin, copia-les primer a la partició de Windows.

PAS 1 — Instal·la Ventoy al USB

  1. Descomprimeix ventoy-*-windows.zip
  2. Executa Ventoy2Disk.exe → botó dret → «Ejecutar como administrador»
  3. A Device, selecciona el teu USB (⚠️ MOLT IMPORTANT: ha de ser el correcte — esborrarà TOT el contingut)
  4. Deixa Partition Style: MBR (per defecte) i marca Secure Boot Support
  5. Prem Install → Yes → espera que acabi (minuts)
  6. Quan acabi, el USB tindrà una partició anomenada «Ventoy» amb espai lliure

PAS 2 — Copia les ISOs

  1. Obre el USB a l’Explorador de Windows
  2. Copia els 3 fitxers .iso a l’arrel del USB (sense descomprimir!)
  3. Expulsa el USB amb seguretat (icona de la safata → «Expulsar»)

PAS 3 — Arrenca des del USB

  1. Reinicia el PC
  2. Prem la tecla del menú d’arrencada segons la marca:
    • Dell → F12 · HP → F9/Esc · Lenovo → F12 · ASUS → F8/Esc · Acer → F12
  3. Tria el USB (l’opció UEFI si n’hi ha)
  4. Al menú de Ventoy, tria la ISO:
    • Windows 11 → instal·lació normal (necessita TPM 2.0 + Secure Boot a la BIOS)
    • Deepin 25 → tria l’opció d’instal·lació normal del menú
    • GParted → Enter per arrencar en mode live

⚠️ Recordatoris importants

  • No descomprimeixis mai les ISOs — s’han de copiar com a .iso
  • Ventoy suporta Secure Boot (versió 1.1.13+); si falla, desactiva Secure Boot a la BIOS temporalment
  • Si una ISO no arrenca, al menú de Ventoy tria l’altre mode (F1 canvia entre grub2 i wimboot)
  • 🔥 Si algun dia instal·les Windows 11 amb aquest USB al teu PC amb dual boot (Deepin + Windows), l’instal·lador pot sobreescriure el gestor d’arrencada (GRUB). Si no vols perdre el dual boot, desconnecta el disc de Deepin durant la instal·lació o repara el GRUB després.

Que vagi bé! Quan tornis a Deepin, em dius com ha anat. 😊

Preparar USB Ventoy

Pas 1: Descarregar Ventoy

Pas 2: Preparar la USB
⚠️ Important: Aquest procés esborrarà totes les dades de la USB. Fes una còpia de seguretat si cal.

Pas 3: Instal·lar Ventoy (mètode de terminal)
Un cop descarregat i descomprimit el fitxer, obre el terminal i executa:

cd ~/Downloads/ventoy-*  # o la ruta on l'hagis descomprimit
sudo sh Ventoy2Disk.sh -i /dev/sdX

Canvia /dev/sdX pel teu dispositiu USB (pots veure’l amb lsblk).

Pas 4: Copiar la ISO
Després d’instal·lar Ventoy, la USB apareixerà com una partició normal. Només has d’arrossegar el fitxer ISO de Deepin 25 (o qualsevol altre) dins de la USB. No cal cap configuració extra: en arrencar des de la USB, Ventoy et mostrarà un menú per triar quina ISO carregar.


Com funciona Ventoy per particions:

  • Quan instal·les Ventoy, crea 2 particions automàticament:
    1. VTOYEFI (petita, ~32MB): la partició d’arrencada.
    2. exFAT (la resta de l’espai): aquí és on poses els fitxers ISO.
  • La partició exFAT és la que Ventoy llegeix per mostrar el menú d’ISOs a l’arrencar.

I el teu backup de fotos?
Sí que pots! Després d’instal·lar Ventoy, pots reduir la partició exFAT i crear-ne una de nova (per exemple EXT4, NTFS o exFAT) amb l’espai lliure. Aquesta partició extra:

  • Apareixerà com una unitat normal al sistema (com qualsevol disc dur extern).
  • No interferirà amb l’arrencada: Ventoy només llegeix la seva partició exFAT per buscar ISOs.
  • Podràs guardar les fotos, documents, etc., sense cap problema.

Com fer-ho a Deepin:

  1. Instal·la Ventoy a la USB (això esborrarà tot el disc).
  2. Obre l’aplicació «Gestor de discs» (o GParted).
  3. Redueix la partició exFAT per deixar espai lliure.
  4. Crea una partició nova amb aquest espai (NTFS o exFAT per compatibilitat amb Windows/macOS si ho necessites).
  5. Formateja-la i ja la pots fer servir per al backup de fotos.

💡 Consell: Quan arrenquis des de la USB, Ventoy només mostrarà les ISOs de la partició exFAT, així que les teves fotos estaran totalment «invisibles» durant l’arrencada, però accessibles quan arrenquis el sistema normal.

Piper TTS a Deepin

Comanda per dir bon dia amb la veu d’Ona:

echo "hola bon dia" | /home/Miquel/piper/piper -m /home/Miquel/piper_linux_x86_64/ca_ES-upc_ona-medium.onnx --output-raw | aplay -r 22050 -f S16_LE -t raw -

1. Extreure el fitxer correctament:

tar -xvf piper_linux_x86_64.tar.gz

2. Descarregar la veu en català (dins de la carpeta que acabes de crear):

wget -P piper_linux_x86_64 https://huggingface.co/rhasspy/piper-voices/resolve/main/ca/ca_ES/upc_ona/x_low/ca_ES-upc_ona-x_low.onnx
wget -P piper_linux_x86_64 https://huggingface.co/rhasspy/piper-voices/resolve/main/ca/ca_ES/upc_ona/x_low/ca_ES-upc_ona-x_low.onnx.json

3. Fer que l’ordinador parli:

echo "hola bon dia" | ./piper_linux_x86_64/piper -m ./piper_linux_x86_64/ca_ES-upc_ona-x_low.onnx --output-raw | aplay -r 22050 -f S16_LE -t raw -

📋 Xuleta d’Ús: Piper TTS (Català) a Deepin

1. COM usar-la des de la Terminal (Deepin)

Si vas afegir la funció al teu ~/.bashrc, tens dues eines ràpides:

  • Escoltar directament:parla "Hola Miquel, el sistema funciona perfectament."
  • Generar un fitxer d’àudio (sense reproduir-lo):cd ~/piper-tts/piper export LD_LIBRARY_PATH=. echo "Text a guardar" | ./piper --model ca_ES-upc_ona-medium.onnx --output_file /ruta/del/meu/fitxer.wav

2. COM usar-la des de PHP (Integració Web)

Com que treballes amb aplicacions PHP, pots generar àudio dinàmicament al servidor. Aquí tens un exemple segur i net:

<?php
$text = "Hola, això és una prova de veu generada des de PHP.";
$output_file = "/tmp/tts_" . uniqid() . ".wav";

// 1. Netejar el text per evitar injecció de comandes a la terminal
$text_net = escapeshellarg($text);

// 2. Construir la comanda (ajusta la ruta si el teu usuari no és 'Miquel')
$comanda = "cd /home/Miquel/piper-tts/piper && " .
           "export LD_LIBRARY_PATH=. && " .
           "echo $text_net | ./piper --model ca_ES-upc_ona-medium.onnx --output_file $output_file 2>/dev/null";

// 3. Executar
shell_exec($comanda);

// 4. Comprovar si s'ha creat i servir-lo (o retornar la ruta)
if (file_exists($output_file)) {
    header('Content-Type: audio/wav');
    header('Content-Disposition: attachment; filename="veu.wav"');
    readfile($output_file);
    unlink($output_file); // Neteja el fitxer temporal després d'enviar-lo
} else {
    echo "Error generant l'àudio.";
}
?>

Nota: Assegura’t que l’usuari que executa PHP (ex: www-data o el teu usuari en entorn de desenvolupament) tingui permisos d’execució a la carpeta /home/Miquel/piper-tts/piper.

3. ON i QUAN usar-la (Casos d’ús pràctics)

  • 🎓 Projectes d’aprenentatge d’idiomes: Com que t’interessa el suport multilingüe, pots canviar el model .onnx (ex: a en_US-amy-medium.onnx) per generar àudio d’exemple per a estudiants de català, anglès o basc.
  • ♿ Accessibilitat: Afegir un botó «Escoltar resposta» a les teves aplicacions web per a usuaris amb discapacitat visual o dificultats de lectura.
  • 🔔 Notificacions d’escriptori: Combinar-ho amb les notificacions de Deepin perquè l’ordinador et llegeixi alertes:parla "Atenció: la còpia de seguretat al servidor Synology ha finalitzat."
  • 🛠️ Depuració (Debugging): Fer que el servidor «parli» quan un script PHP llarg acaba d’executar-se, així no has d’estar mirant la pantalla constantment.

4. COM personalitzar la veu (Trucs avançats)

Piper permet ajustar paràmetres afegint-los a la comanda:

  • Fer-la parlar més ràpid: Afegeix --length_scale 0.8 (valors més baixos = més ràpid).
  • Fer-la parlar més a poc a poc: Afegeix --length_scale 1.2.
  • Més expressiva/aleatòria: Afegeix --noise_scale 0.8 (el valor per defecte és 0.66).

Exemple:

echo "Vaig molt ràpid!" | ./piper --model ca_ES-upc_ona-medium.onnx --length_scale 0.8 --output_file rapid.wav

5. RESOLUCIÓ RÀPIDA DE PROBLEMES

ProblemaSolució
Error: libpiper_phonemize.so.1: cannot openEstàs executant l’ordre fora de la carpeta o sense la variable d’entorn. Fes: cd ~/piper-tts/piper && export LD_LIBRARY_PATH=.
No se sent cap so amb paplayProva a reproduir el fitxer .wav directament amb el reproductor d’àudio del Deepin (doble clic). Si se sent, el problema és de configuració de PulseAudio/PipeWire, no de Piper.
La veu sona molt robòticaAssegura’t que estàs fent servir el model medium o high. Els models x_low són molt ràpids però sonen més artificials.

💡 Proper pas opcional

Si en el futur vols afegir una veu en anglès o basca al mateix sistema, només has de:

  1. Descarregar el .onnx i .json de la nova llengua des del repositori de veus de Piper.
  2. Posar-los a la carpeta ~/piper-tts/piper.
  3. Canviar --model ca_ES-upc_ona-medium.onnx pel nom del nou fitxer a les teves comandes o scripts PHP.

T’ha quedat clar amb aquest format? Si vols que adaptem la funció de bash o l’script de PHP per a algun cas concret dels teus projectes, digue-m’ho!

Backup sda4 → restauració a sda6

Sí. Et preparo una nota-resum tipus xuleta, centrada en què és backup_amd0_sda4_roota.img, quin és l’objectiu i els dos fluxos possibles: comprovar/recuperar i restaurar a sda6.

Backup sda4 → restauració a sda6

1. Punt de partida

Backup original:

/media/Miquel/backup_principal/backup_amd0_sda4_roota.img

Aquest fitxer NO és una imatge ext4 muntable directament.

És una imatge Partclone creada a partir de la partició:

/dev/sda4

La seva capçalera confirma:

partclone-image
0.3.27
EXTFS

Informació de la imatge:

Device size:   70,2 GB
Space in use:  23,0 GB
Free Space:    47,2 GB
Block size:    4096 bytes

Per tant:

sda4 (EXT4)
   │
   │ backup amb Partclone
   ▼
backup_amd0_sda4_roota.img

2. Objectiu

L’objectiu final és recuperar el sistema que hi havia a sda4 i posar-lo a sda6, sense tocar el backup original.

Abans de tocar sda6, volem comprovar que el backup és correcte.

Per això fem servir una imatge temporal.


3. Imatge temporal

Hem creat al mateix USB:

/media/Miquel/backup_principal/roota_temporal.img

Inicialment:

72 GiB

La vam preparar amb ext4, però això no és essencial, perquè Partclone substitueix el contingut durant la restauració.

El fitxer està associat actualment a:

/dev/loop0

És a dir:

/dev/loop0
      │
      ▼
roota_temporal.img

4. Flux de treball actual

Ara mateix està en curs:

                    LECTURA
                       │
                       ▼
backup_amd0_sda4_roota.img
       (Partclone EXTFS)
                       │
                       │ partclone.restore
                       ▼
                  /dev/loop0
                       │
                       ▼
              roota_temporal.img
                 (ext4 real)

La comanda utilitzada és:

sudo partclone.restore \
-s /media/Miquel/backup_principal/backup_amd0_sda4_roota.img \
-o /dev/loop0

Important

-s = source / origen

Per tant:

-s backup_amd0_sda4_roota.img

→ només llegeix el backup.

-o = output / destinació

-o /dev/loop0

→ escriu a roota_temporal.img.

No està escrivint ni a sda4 ni a sda6.


5. Quan Partclone arribi al 100 %

Primer comprovarem que la restauració ha acabat correctament.

Després muntarem:

roota_temporal.img
       │
       ▼
/mnt/backup_root

I podrem comprovar:

ls -lah /mnt/backup_root

i explorar el sistema recuperat.

També podrem comprovar que hi són directoris importants com:

/etc
/boot
/usr
/var
/home

segons l’estructura que tingués aquella instal·lació.


6. Flux final: restaurar a sda6

Si la còpia temporal és correcta, l’objectiu final serà:

backup original
       │
       ▼
roota_temporal.img
       │
       │ comprovat
       ▼
     /dev/sda6

És a dir:

           BACKUP
              │
              ▼
backup_amd0_sda4_roota.img
              │
              ▼
     roota_temporal.img
              │
              │ comprovació
              ▼
           /dev/sda6

sda4 no és la destinació final.


7. Regla de seguretat

Durant tot el procés:

backup_amd0_sda4_roota.img
        ↓
     ORIGINAL
        ↓
     NO TOCAR

No s’ha de fer mai:

partclone.restore ... -o /dev/sda4

ni:

partclone.restore ... -o /dev/sda6

fins que hàgim decidit definitivament que volem sobreescriure sda6.

Primer:

backup → temporal → comprovar → sda6


8. Estat actual

USB:

/dev/sdb1
227 GB total
87 GB utilitzats
129 GB lliures

Fitxers:

backup_amd0_sda4_roota.img    ← BACKUP ORIGINAL
roota_temporal.img             ← DESTINACIÓ TEMPORAL

Actualment:

Partclone → 11% ... en procés

Quan arribi al 100 %, no fem encara la restauració a sda6.

Primer comprovem la còpia temporal.

Així tenim el procediment ben documentat i, sobretot, queda clar el punt crític: sda4 és l’origen històric del backup, però sda6 serà la destinació final; roota_temporal.img és el pas intermedi de verificació.



La imatge backup_amd0_sda4_roota.img està en el format natiu de Partclone (no és una imatge dd en brut ni un fitxer comprimit). Et detallo:

Format de la imatge

  • Tipus: imatge de bloc de Partclone (partclone-image).
  • Contingut: només copia els blocs ocupats de la partició sda4 (la partició root), no tot l’espai en brut. Per això la imatge (≈23 GB) és més petita que la mida total de la partició.
  • Estructura interna: el fitxer .img conté una capçalera de Partclone + les dades de la partició, amb informació del sistema de fitxers (normalment ext4 en una arrel de sistema).

Com ho pots verificar

Per confirmar-ho al 100%, pots executar a la terminal:

file /media/Miquel/backup_principal/backup_amd0_sda4_roota.img

Hauries de veure una sortida similar a:

Clonezilla image (partclone), version 2.x

També pots obtenir informació detallada amb:

partclone.info -s /media/Miquel/backup_principal/backup_amd0_sda4_roota.img

Com restaurar-la

Com que és format Partclone (ext4), per recuperar-la hauries de fer:

sudo partclone.ext4 -r -s /media/Miquel/backup_principal/backup_amd0_sda4_roota.img -o /dev/sda4

Punt important

Aquesta imatge no es pot muntar directament (no és una imatge en brut tipus dd). Si el que vols és extreure un fitxer concret sense restaurar tota la partició, caldria primer convertir-la a una imatge en brut (per exemple amb partclone.restore -s ... -o image.raw) i després muntar-la amb mount -o loop.

Vols que t’ajudi amb algun d’aquests passos (verificar el format, restaurar-la o extreure un fitxer)?


DNI de la partició (UUID)

Exacte, tens tota la raó. partclone fa una còpia bit a bit de la partició, així que inclou TOT: sistema operatiu, programes, configuracions, i sí, tots els identificadors únics.

Anem a desglossar els dos «DNI» clau que has mencionat:

1. DNI de la partició (UUID)

On es guarda:

  • Al superblock d’ext4: Cada partició ext4 té un UUID únic incrustat al seu superblock (a l’inici de la partició).
  • A /etc/fstab: El sistema operatiu fa servir aquest UUID per saber quina partició muntar a l’arrel (/).
  • A la taula de particions GPT/MBR: El disc sencer també té un identificador.

Problema en clonar: Si copies aquesta partició a un altre disc i l’arrencs, tindràs dues particions amb el mateix UUID (f6959e2a-75c7-4d61-8d31-a0b8ea007a9b). Això pot causar conflictes si els dos discos estan connectats alhora.

2. DNI de l’ordinador (machine-id, hostname)

On es guarda:

  • /etc/machine-id: Identificador únic del sistema (32 caràcters hexadecimals).
  • /etc/hostname: El nom de l’ordinador a la xarxa.
  • Possiblement a /etc/hosts: Mapeig del hostname.
  • Configuracions de xarxa: Si tens configuracions estàtiques, poden incloure el hostname.
  • Logs i bases de dades: Alguns serveis (com systemd-journal) fan servir el machine-id.

Problema en clonar: Si tens dos ordinadors amb el mateix machine-id a la mateixa xarxa, pot haver-hi conflictes amb serveis com DHCP, logs centralitzats, o aplicacions que fan servir aquest ID per a llicències.


Com trobar-los un cop acabi el backup

Quan acabi el procés de partclone, podem muntar la imatge en mode només lectura i buscar exactament on són aquests identificadors:

# Crear un punt de muntatge
sudo mkdir -p /mnt/backup_roota

# Muntar la imatge (partclone.ext4 crea imatges que es poden muntar directament)
sudo mount -o ro,loop /media/Miquel/backup_principal/backup_sda4_roota.img /mnt/backup_roota

# Veure el machine-id
cat /mnt/backup_roota/etc/machine-id

# Veure el hostname
cat /mnt/backup_roota/etc/hostname

# Veure el fstab (on es referencia l'UUID)
cat /mnt/backup_roota/etc/fstab

# Desmuntar quan acabem
sudo umount /mnt/backup_roota

Per veure l’UUID de la partició (el que està al superblock), podem fer servir blkid directament sobre la imatge o sobre el fitxer muntat:

sudo blkid /media/Miquel/backup_principal/backup_sda4_roota.img

O si la imatge està muntada:

lsblk -f /dev/loopX  # on loopX és el dispositiu que s'ha creat en muntar

Resum: Sí, la imatge inclou tots dos «DNI». Quan acabi el backup, els podrem trobar fàcilment muntant la imatge. Si algun dia vols clonar aquesta partició a un altre lloc, haurem de canviar l’UUID (amb tune2fs -U) i possiblement el machine-id (es pot regenerar amb systemd-machine-id-setup o simplement esborrant el fitxer i deixant que es regeneri al proper arrenc).

Mentre s’acaba el backup, puc anar preparant els comandaments per extreure aquesta informació. Digues-me quan acabi!


Exacte, tens tota la raó. partclone fa una còpia bit a bit de la partició, així que inclou TOT: sistema operatiu, programes, configuracions, i sí, tots els identificadors únics.

Anem a desglossar els dos «DNI» clau que has mencionat:

1. DNI de la partició (UUID)

On es guarda:

  • Al superblock d’ext4: Cada partició ext4 té un UUID únic incrustat al seu superblock (a l’inici de la partició).
  • A /etc/fstab: El sistema operatiu fa servir aquest UUID per saber quina partició muntar a l’arrel (/).
  • A la taula de particions GPT/MBR: El disc sencer també té un identificador.

Problema en clonar: Si copies aquesta partició a un altre disc i l’arrencs, tindràs dues particions amb el mateix UUID (f6959e2a-75c7-4d61-8d31-a0b8ea007a9b). Això pot causar conflictes si els dos discos estan connectats alhora.

2. DNI de l’ordinador (machine-id, hostname)

On es guarda:

  • /etc/machine-id: Identificador únic del sistema (32 caràcters hexadecimals).
  • /etc/hostname: El nom de l’ordinador a la xarxa.
  • Possiblement a /etc/hosts: Mapeig del hostname.
  • Configuracions de xarxa: Si tens configuracions estàtiques, poden incloure el hostname.
  • Logs i bases de dades: Alguns serveis (com systemd-journal) fan servir el machine-id.

Problema en clonar: Si tens dos ordinadors amb el mateix machine-id a la mateixa xarxa, pot haver-hi conflictes amb serveis com DHCP, logs centralitzats, o aplicacions que fan servir aquest ID per a llicències.


Com trobar-los un cop acabi el backup

Quan acabi el procés de partclone, podem muntar la imatge en mode només lectura i buscar exactament on són aquests identificadors:

# Crear un punt de muntatge
sudo mkdir -p /mnt/backup_roota

# Muntar la imatge (partclone.ext4 crea imatges que es poden muntar directament)
sudo mount -o ro,loop /media/Miquel/backup_principal/backup_sda4_roota.img /mnt/backup_roota

# Veure el machine-id
cat /mnt/backup_roota/etc/machine-id

# Veure el hostname
cat /mnt/backup_roota/etc/hostname

# Veure el fstab (on es referencia l'UUID)
cat /mnt/backup_roota/etc/fstab

# Desmuntar quan acabem
sudo umount /mnt/backup_roota

Per veure l’UUID de la partició (el que està al superblock), podem fer servir blkid directament sobre la imatge o sobre el fitxer muntat:

sudo blkid /media/Miquel/backup_principal/backup_sda4_roota.img

O si la imatge està muntada:

lsblk -f /dev/loopX  # on loopX és el dispositiu que s'ha creat en muntar

Resum: Sí, la imatge inclou tots dos «DNI». Quan acabi el backup, els podrem trobar fàcilment muntant la imatge. Si algun dia vols clonar aquesta partició a un altre lloc, haurem de canviar l’UUID (amb tune2fs -U) i possiblement el machine-id (es pot regenerar amb systemd-machine-id-setup o simplement esborrant el fitxer i deixant que es regeneri al proper arrenc).

Mentre s’acaba el backup, puc anar preparant els comandaments per extreure aquesta informació. Digues-me quan acabi!


Backup amb partclone

Backup amb partclone

Miquel@Miquel-PC:~$ lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS

sda 8:0 0 476,9G 0 disk

├─sda1 8:1 0 100M 0 part /efi

├─sda2 8:2 0 16M 0 part

├─sda3 8:3 0 296,4G 0 part /media/Miquel/Windows

├─sda4 8:4 0 1,2G 0 part

├─sda5 8:5 0 129,3G 0 part /media/Miquel/Roota1

└─sda6 8:6 0 50G 0 part /var

/persistent/ostree

/ostree

/sysroot/ostree

/sysroot

/

sdb 8:16 1 231G 0 disk

└─sdb1 8:17 1 230,9G 0 part /media/Miquel/backup_principal1

Miquel@Miquel-PC:~$

se’n a sda6 vull ececutar aquesta comanda:

sudo partclone.ext4 -c -s /dev/sda5 -o /media/Miquel/

/media/Miquel/backup_principal1

1º desmuntar sda5

sudo umount /dev/sda5

├ ─sda5 8:5 0 129,3G 0 part

abans ├─sda5 8:5 0 129,3G 0 part /media/Miquel/Roota1

2º Instal·lar partclone (si encara no està instal·lat)

sudo apt update && sudo apt install partclone

3º executem comanda de backup

sudo partclone.ext4 -c -s /dev/sda5 -o /media/Miquel/backup_principal1/backup_amd1_sda5.img

4º Restauració

La partició no s’ha de dir igual — pot ser sda6, sdb1, sdc3… el nom depèn de com estigui organitzat el disc de l’altre ordinador. El que importa és que compleixi les condicions:

Condicions per a la partició de destinació (sigui la que sigui):

  1. Tamany ≥ al de la imatge (mai més petita).
  2. Format ext4 (igual que la imatge).
  3. Que no estigui muntada (o desmuntar-la abans).

Comanda de restaurauració adaptada per a l’exemple amb sda6:

sudo partclone.ext4 -r -s /media/Miquel/backup_principal/backup_amd1_sda5.img -o /dev/sda6

L’única diferència és el nom de la partició de destinació al final (/dev/sda6 en comptes de /dev/sda5). La imatge es restaura igual.

Passos recomanats a l’altre ordinador:

  1. Connecta el USB amb la imatge.
  2. Executa lsblk per veure quines particions hi ha i quina és la que vols (amb espai suficient i ext4).
  3. Assegura’t que no estigui muntada: sudo umount /dev/sda6 (si ho està).
  4. Llança la comanda amb la partició correcta.

I ja està! La imatge es restaura perfectament a qualsevol partició que compleixi els requisits. 😉

⭐⭐Imatge de disc amb ‘dd’ vs ‘partclone’


📌 Què fa la comanda dd i com s’usa per fer una imatge de disc

dd és una eina clàssica de Linux que copia dades bit a bit (a nivell brut, sense interpretar el sistema de fitxers). És ideal per fer imatges exactes d’una partició o d’un disc sencer.

Exemple que vam utilitzar:

sudo dd if=/dev/sda4 of=/media/Miquel/backup/sda4_amd0.img bs=4M status=progress

Desglossament dels paràmetres:

ParàmetreSignificat
sudoExecuta amb permisos d’administrador (imprescindible per llegir el disc).
if=Input File → l’origen. Aquí /dev/sda4 (la partició que volem copiar).
of=Output File → la destinació. /media/Miquel/backup/sda4_amd0.img (el fitxer imatge al USB).
bs=4MBlock Size → mida de cada bloc de lectura/escriptura (4 MB). Aconsegueix un bon equilibri entre velocitat i memòria.
status=progressMostra en temps real el progrés, la velocitat i el temps transcorregut.

Què fa realment?

  • Llegeix la partició /dev/sda4 bloc a bloc i ho escriu tot al fitxer .img.
  • La imatge resultant és una còpia exacta de la partició (incloent-hi espai buit, sistema de fitxers, metadades…).
  • Es pot restaurar més endavant amb la mateixa comanda però invertint els paràmetres:sudo dd if=fitxer.img of=/dev/sda4 bs=4M status=progress

Aquí tens la comanda exacta de restauració:

sudo dd if=/media/Miquel/backup/sda4_amd0.img of=/dev/sda4 bs=4M status=progress

Recorda: executa-la des d’un USB en viu, amb sda4 desmuntada i verificant amb lsblk que of=/dev/sda4 és la partició correcta. 😉


⚠️ Avís important per al blog:

  • dd no comprova si la partició està muntada → fer-ho amb una partició en ús pot donar una imatge inconsistent o corrompre dades.
  • Molt perillós: si et confons en of=, pots sobrescriure un disc sencer. Sempre comprova els discs amb lsblk abans.
  • La imatge ocupa tota la mida de la partició, no només l’espai usat (en el nostre cas, 58G).

Aquí tens un resum clar i directe per al teu blog:


📌 partclone: copiar només l’espai usat (l’alternativa intel·ligent a dd)

Què és i què fa?

partclone és una eina de clonatge que només copia els blocs en ús d’una partició, ignorant l’espai buit. Això fa que les imatges siguin molt més petites i ràpides de crear que amb dd (que ho copia tot, fins i tot el buit).

  • Imatge dd: 58G (la partició sencera).
  • Imatge partclone: ~38G (només el que s’usa realment).

Com s’usa?

sudo partclone.ext4 -c -s /dev/sda4 -o /media/Miquel/backup/imatge.img
ParàmetreSignificat
partclone.ext4La variant per al sistema de fitxers ext4 (hi ha .xfs, .ntfs, .btrfs…).
-cClone → crear una imatge.
-sSource → partició d’origen (/dev/sda4).
-oOutput → fitxer de destinació.

Opcions útils:

  • -z → comprimeix la imatge (més petita, més lenta).
  • -N → interfície gràfica (ncurses) amb progrés visual.

Restauració:

sudo partclone.ext4 -r -s imatge.img -o /dev/sda4

⚠️ Per què NO ha estat possible en aquest cas?

Quan vam intentar fer la imatge de sda4, partclone va donar aquest error:

device (/dev/sda4) is mounted at /var
error exit

El motiu: partclone es nega a treballar amb particions muntades i en ús, perquè si hi ha escriptures mentre copia, la imatge quedaria inconsistent. Com que sda4 és la partició arrel (muntada a /, /var, /ostree…), i estàvem treballant des del mateix sistema, era impossible desmuntar-la.

En canvi, dd sí que ho va permetre perquè no comprova si la partició està muntada (tot i que ho fa amb cert risc d’inconsistència).

Solució per a partclone: cal fer-ho des d’un USB en viu (live), on sda4 no està muntada. Llavors partclone funciona sense problemes i amb la imatge més petita.


Si ho vols, et preparo també la part de comparació final dd vs partclone per tancar l’article. Vols?