Tips en Trucs 2025

SystemRescueCD op USB stick installeren

Eén van de meest gewaardeerde hulpmiddelen om systemen te onderzoeken en te herstellen is SystemRescueCD. Ik gebruik het om systeembackups, reservekopieën van gegevens te maken en systemen te onderzoeken en te herstellen. Ik gebruik het eveneens bij het installeren van computers van kennissen, waardoor ze zelf zeer snel geautomatiseerde een reservekopie van het systeem kunnen terugzetten. Noem het een terug naar fabrieksinstellingen functie. Zie de tip Systeemherstel met SystemRescue.

Vandaag tonen we hoe je SystemRescueCD op een opstartbare USB Stick plaatst. Daarna kan je op deze USB Stick zaken toevoegen, zoals eigen scripts om bepaalde taken te automatiseren, enz. M.a.w. op de opstarbare SystemRescue USB Stick kunnen we bestanden toevoegen, aanpassen, enz. Handig om steeds op zak te hebben.

SystemRescueCD

De USB Stick voorbereiden voor SystemRescue

Zorg dat je steeds goed opvolgt met welke schijf je werkt, een foutje kan jouw volledige systeem onbruikbaar maken.

We beginnen met het plaatsen van de USB Stick. Deze wordt automatisch door de Linux kernel herkend. Om na te gaan hoe we de USB Stick kunnen benaderen, vraag je de kernel meldingen op met:

dany@pindabook:~$ sudo dmesg -T
[zo jan 26 15:15:01 2025] microcode: microcode updated early to revision 0x26, date = 2019-11-12
[zo jan 26 15:15:01 2025] Linux version 6.1.0-30-amd64 (debian-kernel@lists.debian.org) (gcc-12 (Debian 12.2.0-14) 1
2.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT_DYNAMIC Debian 6.1.124-1 (2025-01-12)
[zo jan 26 15:15:01 2025] Command line: BOOT_IMAGE=/boot/vmlinuz-6.1.0-30-amd64 root=UUID=b9867d1b-40a1-4cc2-bfcc-d9
695bb09352 ro quiet i8042.reset=1 ... [zo jan 26 15:32:37 2025] usb 3-2: new SuperSpeed USB device number 2 using xhci_hcd
[zo jan 26 15:32:37 2025] usb 3-2: New USB device found, idVendor=8564, idProduct=4000, bcdDevice= 0.38
[zo jan 26 15:32:37 2025] usb 3-2: New USB device strings: Mfr=3, Product=4, SerialNumber=5
[zo jan 26 15:32:37 2025] usb 3-2: Product: Transcend
[zo jan 26 15:32:37 2025] usb 3-2: Manufacturer: TS-RDF5  
[zo jan 26 15:32:37 2025] usb 3-2: SerialNumber: 000000000037
[zo jan 26 15:32:37 2025] usb-storage 3-2:1.0: USB Mass Storage device detected
[zo jan 26 15:32:37 2025] scsi host4: usb-storage 3-2:1.0
[zo jan 26 15:32:38 2025] scsi 4:0:0:0: Direct-Access     TS-RDF5  SD  Transcend    TS38 PQ: 0 ANSI: 6
[zo jan 26 15:32:38 2025] sd 4:0:0:0: Attached scsi generic sg1 type 0
[zo jan 26 15:32:38 2025] sd 4:0:0:0: [sdb] 15613952 512-byte logical blocks: (7.99 GB/7.45 GiB)
[zo jan 26 15:32:38 2025] sd 4:0:0:0: [sdb] Write Protect is off
[zo jan 26 15:32:38 2025] sd 4:0:0:0: [sdb] Mode Sense: 23 00 00 00
[zo jan 26 15:32:38 2025] sd 4:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[zo jan 26 15:32:38 2025]  sdb: sdb1 sdb2
[zo jan 26 15:32:38 2025] sd 4:0:0:0: [sdb] Attached SCSI removable disk

Op het einde, let ook op de tijdsaanduiding, zie je de meldingen i.v.m. de USB Stick. Je kunt de USB Stick meldingen o.a. herkennen aan de productnaam (in het voorbeeld: Product: Transcend) en zijn capaciteit (in het voorbeeld ((7.99 GB/7.45 GiB)). Voor ons is de apparaatkoppeling (in het voorbeeld  sdb: sdb1 sdb2) belangrijk. Daaruit leiden we af dat de USB Stick in het voorbeeld is gekoppeld aan /dev/sdb en in het voorbeeld twee partities bevat: /dev/sdb1 en /dev/sdb2.

Om ongelukken te voorkomen, heb ik in alle volgende opdrachten sdb vervangen door sdX. Het spreekt voor zich dat je steeds sdX vervangt door de apparaatkoppeling die je hebt gevonden met bovenstaande opdracht.

Met de volgende opdracht formatteren we de USB Stick door een nieuwe partitietabel aan te maken. Daarbij worden alle gegevens op de USB Stick onherroepelijk en zonder waarschuwing gewist.

dany@pindabook:~$ echo 'label: dos' | sudo sfdisk /dev/sdX
[sudo] wachtwoord voor root:  
Checking that no-one is using this disk right now ... OK

Disk /dev/sdX: 7,45 GiB, 7994343424 bytes, 15613952 sectors
Disk model: SD  Transcend    
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x60f95da8

Old situation:

Device     Boot   Start      End  Sectors  Size Id Type
/dev/sdX1          8192  1056767  1048576  512M  c W95 FAT32 (LBA)
/dev/sdX2       1056768 15613951 14557184  6,9G 83 Linux

>>> Script header accepted.
>>> Done.
Created a new DOS (MBR) disklabel with disk identifier 0xc2c9e541.

New situation:
Disklabel type: dos
Disk identifier: 0xc2c9e541

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Daarna maken we een FAT32 partitie aan, die de volledige resterende USB Stick capaciteit gebruikt:

dany@pindabook:~$ echo 'start=2048, type=c' | sudo sfdisk /dev/sdX
[sudo] wachtwoord voor root:  
Checking that no-one is using this disk right now ... OK

Disk /dev/sdX: 7,45 GiB, 7994343424 bytes, 15613952 sectors
Disk model: SD  Transcend    
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xc2c9e541

Old situation:

>>> Created a new DOS (MBR) disklabel with disk identifier 0x1dab1ecc.
/dev/sdX1: Created a new partition 1 of type 'W95 FAT32 (LBA)' and of size 7,4 GiB.
Partition #1 contains a vfat signature.
/dev/sdX2: Done.

New situation:
Disklabel type: dos
Disk identifier: 0x1dab1ecc

Device     Boot Start      End  Sectors  Size Id Type
/dev/sdX1        2048 15613951 15611904  7,4G  c W95 FAT32 (LBA)

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Als controle, vragen we een overzicht van de USB Stick structuur op:

dany@pindabook:~$ sudo sfdisk -d /dev/sdX
label: dos
label-id: 0x1dab1ecc
device: /dev/sdX
unit: sectors
sector-size: 512

/dev/sdX1 : start=        2048, size=    15611904, type=c

De laatste voorbereidende stap bestaat uit het formatteren van de FAT32 partitie en deze de correcte naam te geven. De naam zorgt ervoor dat de bootmanager de partitie met SystemRescue kan vinden en opstarten. Voor SystemRescueCD 11.03 geven we de partitie de naam RESCUE1103 (1103 staat voor versie 11.03).

dany@pindabook:~$ sudo mkfs.vfat -n "RESCUE1103" /dev/sdX1
[sudo] wachtwoord voor root: 
mkfs.fat 4.2 (2021-01-31)

Bovenstaande stappen kan je vanzelfsprekend ook uitvoeren met hulpprogramma's zoals GParted, eveneens een onderdeel van SystemRescueCD.

Verwijder de USB Stick.

SystemRescueCD downloaden en koppelen

Je kunt SystemRescueCD downloaden via een browser via de downloadpagina of met de volgende opdracht. Als je downloadt via Sourceforge kan dit zeer lang duren als Sourceforge je doorstuurt naar een trage spiegelserver (mirror). Downloaden via Fastly gaat veel sneller.

dany@pindabook:~$ wget https://fastly-cdn.system-rescue.org/releases/11.03/systemrescue-11.03-amd64.iso
--2025-02-01 10:51:00--  https://fastly-cdn.system-rescue.org/releases/11.03/systemrescue-11.03-amd64.iso
Herleiden van fastly-cdn.system-rescue.org (fastly-cdn.system-rescue.org)... 2a04:4e42:2::347, 151.101.9.91
Verbinding maken met fastly-cdn.system-rescue.org (fastly-cdn.system-rescue.org)|2a04:4e42:2::347|:443... verbonden.
HTTP-verzoek is verzonden; wachten op antwoord... 200 OK
Lengte: 989855744 (944M) [application/octet-stream]
Wordt opgeslagen als: ‘systemrescue-11.03-amd64.iso’

systemrescue-11.03-amd64.iso 100%[==============================================>] 944,00M  11,1MB/s    in 86s     

2025-02-01 10:52:26 (11,0 MB/s) - '‘systemrescue-11.03-amd64.iso’' opgeslagen [989855744/989855744]

Om SystemRescueCD te lezen, moet je het ISO bestand niet op een DVD schrijven, maar kan je deze koppelen aan het bestandssysteem. Daarvoor maken we een map aan waaraan we het ISO bestand gaan koppelen:

dany@pindabook:~$ sudo mkdir /mnt/sysreccd

Koppel het SystemRescueCD ISO bestand aan deze map met:

dany@pindabook:~$ sudo mount -o loop systemrescue-11.03-amd64.iso /mnt/sysreccd/
[sudo] wachtwoord voor root: 
mount: /mnt/sysreccd: WARNING: source write-protected, mounted read-only.

De melding (WARNING) is logisch, daar we een DVD image (ISO bestand) koppelen.

SystemRescueCD op de USB Stick installeren

Plaats de daarstraks voorbereide USB Stick terug in de computer. Deze wordt opnieuw door de Linux kernel herkend en gekoppeld. Controleer dit met de sudo dmesg -T opdracht (zie hoger).

Om bestanden naar de USB Stick te kopiëren, koppelen we die eveneens aan het bestandssysteem. Deze keer als een gewone gebruiker die een USB Stick wil gebruiken:

dany@pindabook:~$ udisksctl mount -b /dev/sdX1
==== AUTHENTICATING FOR org.freedesktop.udisks2.filesystem-mount ====
Authenticatie is vereist om TS-RDF5 SD  Transcend (/dev/sdX1) aan te koppelen
Authenticating as: Dany Pinoy,,, (dany)
Password:  
==== AUTHENTICATION COMPLETE ====
Mounted /dev/sdX1 at /media/dany/RESCUE1103

Let in de uitvoer op de gekoppelde map, in het voorbeeld: Mounted /dev/sdX1 at /media/dany/RESCUE1103. Vervang in de volgende opdrachten de map /media/dany/RESCUE1103 door de bij jouw vermelde map.

Nu we zowel de SystemRescueCD als de USB Stick gekoppeld hebben, kunnen de we inhoud van de SystemRescueCD kopiëren naar de USB Stick:

dany@pindabook:~$ cp -r /mnt/sysreccd/* /media/dany/RESCUE1103/

De USB Stick maken we opstartbaar door er de Grub bootmanager op te installeren:

dany@pindabook:~$ sudo grub-install --target=x86_64-efi --recheck --removable --efi-directory=/media/dany/RESCUE1103/ --boot-directory=/media/dany/RESCUE1103/boot/
Installeren voor x86_64-efi-platform.
Installatie is afgerond. Er werden geen fouten gerapporteerd.

Nog de meegeleverde bootmanager configuratie kopiëren naar de juiste plaats met de juiste naam:

dany@pindabook:~$ sudo cp /mnt/sysreccd/boot/grub/grubsrcd.cfg /media/dany/RESCUE1103/boot/grub/grub.cfg

We zorgen dat we straks de USB Stick veilig kunnen verwijderen, door alle gegevens naar de USB Stick te schrijven:

dany@pindabook:~$ sync

Daar we de inhoud van de SystemRescueCD niet langer nodig hebben, koppelen we die los:

dany@pindabook:~$ sudo umount /mnt/sysreccd

De SystemRescue USB Stick is nu reeds klaar voor gebruik en kan na het veilig verwijderen (zie verder: udisksctl unmount -b /dev/sdX1), getest worden. Deze heeft dezelfde functionaliteit als het origineel.

De SystemRescue USB Stick uitbreiden

De SystemRescue USB Stick is met elk systeem aanpasbaar (VFAT partitie). Als voorbeeld gaan we een script automatisch laten starten bij het opstarten van de SystemRescue USB Stick.

Zorg dat de SystemRescue USB Stick gekoppeld is. Daarna plaatsen we op de USB Stick in de map autorun/ het script autorun. We gebruiken daarvoor hier de tekst editor nano:

dany@pindabook:~$ nano /media/dany/RESCUE1103/autorun/autorun

En voeren het volgende script in:

 GNU nano 7.2         /media/dany/RESCUE1103/autorun/autorun *                  
#!/sbin/bash
echo '. /run/archiso/bootmnt/pindanet.sh' >> /root/.bashrc


^G Hulp      ^O Opslaan   ^W Zoeken    ^K Knippen   ^T Opdracht  ^C Positie
^X Afsluiten ^R Inlezen   ^\ Vervangen ^U Plakken   ^J Uitvullen ^/ Naar regel

Sla het script op met de sneltoets Ctrl+o gevolgd door Return. Verlaat de nano editor met de sneltoets Ctrl+x.

Dit script wordt vroeg in de opstartprocedure uitgevoerd. Het enige wat we hier doen is zorgen dat er bij het starten van een terminalsessie, de laatste stap in de opstartprocedure, een ander script (pindanet.sh) wordt gestart. Dit script moet in de hoofdmap van de USB Stick staan en kunnen we bijvoorbeeld aanmaken met nano:

dany@pindabook:~$ nano /media/dany/RESCUE1103/pindanet.sh

Daar bij elke nieuwe terminalsessie dit script wordt uitgevoerd, bestaat het uit twee delen (if [[ "$(who am i)" == *\(*\) ]]; then wordt uitgevoerd indien de terminal via een SSH verbinding start. Het else gedeelde wordt uitgevoerd op een terminal op de computer zelf, dus normaal maar één keer. De commentaarregels zorgen voor wat uitleg.

 GNU nano 7.2           /media/dany/RESCUE1103/pindanet.sh *                    
#!/sbin/bash
if [[ "$(who am i)" == *\(*\) ]]; then
 echo "Verbonden via SSH."
else # Terminal op de computer
 # Zorgt voor een AZERTY toetsenbord
 loadkeys be-latin1
 # Zorgt voor grotere schermtekst
 setfont sun12x22
 # Zorgt voor een WiFi netwerkverbinding
 nmcli dev wifi connect WiFi-SSID-Naam password "sterkwachtwoord"
 # Schakelt de Firewall uit
 systemctl stop iptables
 # Activeert de netwerknaam sysrescue.local
 systemctl start avahi-daemon
 # Bij elke start kan je een root wachtwoord aanmaken.
 # Waardoor je via SSH kunt werken: ssh root@sysrescue.local
 passwd
fi

^G Hulp      ^O Opslaan   ^W Zoeken    ^K Knippen   ^T Opdracht  ^C Positie
^X Afsluiten ^R Inlezen   ^\ Vervangen ^U Plakken   ^J Uitvullen ^/ Naar regel

Sla het script op en verlaat de tekst editor. Je kunt de aangepaste SystemRescue USB nu veilig loskoppelen met:

dany@pindabook:~$ udisksctl unmount -b /dev/sdX1
Unmounted /dev/sdX1.

De SystemRescue USB Stick gebruiken

Bij het opstarten van de SystemRescue USB Stick, krijg je het volgende tekstscherm:

========= SystemRescue 11.03 (x86_64) ======== tty1/6 =========
                    https://www.system-rescue.org/
 
* Console environment :
   Run setkmap to choose the keyboard layout (also accessible with the arrow up key)
   Run manual to read the documentation of SystemRescue
 
* Graphical environment :
   Type startx to run the graphical environment
   X.Org comes with the XFCE environment and several graphical tools:
   - Partition manager: .. gparted
   - Web browser: ........ firefox
   - Text editor: ........ featherpad
sysrescue login: root (automatic login) Device 'wlp4s0' successfully activated with '12345678-abcd-1234-abcd-1234567890ab'. New password: Retype new password: passwd: password updated successfully
[root@sysrescue ~]#  

Je merkt dat SystemRescue verbinding kon maken met een WiFi Access Point (Device 'wlp4s0' successfully activated) dat we in het script vermeld hebben (in het voorbeeld: WiFi-SSID-Naam).

Daarna moet je een wachtwoord aanmaken voor de root gebruiker, om via SSH toegang te krijgen.

Je kunt nu alle in SystemRescue standaard geïnstalleerde opdrachten uitvoeren, een voorbeeld:

[root@sysrescue ~]# who am i
root     tty1         2025-01-27 17:55

Laten we nu ook de met de SystemRescue USB Stick opgestarte computer via een SSH verbinding bedienen.

dany@main:~$ ssh root@sysrescue.local
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:Omvtn3QB6VizF/Gf7iFdctllKanbVYNxUXEZTfJu9rs.
Please contact your system administrator.
Add correct host key in /home/dany/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/dany/.ssh/known_hosts:48
  remove with:
  ssh-keygen -f '/home/dany/.ssh/known_hosts' -R 'sysrescue.local'
Host key for sysrescue.local has changed and you have requested strict checking.
Host key verification failed.

Oeps, dit ging fout. Bij elke start maakt SystemRescue een nieuwe vingerafdruk (fingerprint) aan, waardoor SSH de verbinding afbreekt. Dit kan namelijk een poging zijn om de computer te hacken. Om de eerder verkregen SystemRescue vingerafdruk te verwijderen, gebruik je de volgende opdracht:

dany@main:~$ ssh-keygen -f '/home/dany/.ssh/known_hosts' -R 'sysrescue.local'
# Host sysrescue.local found: line 46
# Host sysrescue.local found: line 47
# Host sysrescue.local found: line 48
/home/dany/.ssh/known_hosts updated.
Original contents retained as /home/dany/.ssh/known_hosts.old

En proberen we opnieuw aan te melden:

dany@main:~$ ssh root@sysrescue.local
The authenticity of host 'sysrescue.local (192.168.129.29)' can't be established.
ED25519 key fingerprint is SHA256:Omvtn3QB6VizF/Gf7iFdctllKanbVYNxUXEZTfJu9rs.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'sysrescue.local' (ED25519) to the list of known hosts.
root@sysrescue.local's password: 
SSH

Na het invoeren van het gepaste wachtwoord, krijgen we enkel de melding SSH. Voeren we opnieuw de opdracht van daarstraks uit:

[root@sysrescue ~]# who am i
root     pts/0        2025-01-27 17:59 (192.168.129.49)

We merken nu op het einde van de uitvoerregel het IP adres van de computer tussen haakjes. In het script testen we met if of er haakjes voorkomen in de uitvoer om te bepalen op we via SSH of lokaal aangemeld zijn.

Standaard kan je niets aanpassen (schrijven) op een opgestarte SystemRescue USB Stick. Met de mount opdracht zonder opties kan je een overzicht krijgen van alle gekoppelde schijven. Standaard is er maar één gekoppeld, let op de apparaatnaam van de koppelde map /run/archiso/bootmnt.

Je kunt de SystemRescue USB Stick beschrijfbaar maken met de volgende opdracht:

[root@sysrescue ~]# mount /dev/sdX1 /run/archiso/bootmnt -o rw,remount

En bijvoorbeeld het opstartscript aanpassen met de tekst editor nano:

[root@sysrescue ~]# nano /run/archiso/bootmnt/pindanet.sh

In onderstaande script zoeken we met behulp van avahi het IP adres van een NAS met de naam pindabackup.local.

Met de opdracht mount -t cifs //$backupip/systems /mnt koppelen we de gedeelde map systems op de NAS aan de map /mnt. Handig als je backups wilt maken en/of terugzetten.

Daarna worden op het scherm met echo opdrachten enkele handige opdrachten vermeld, bedoeld als geheugensteun.

backupip=$(avahi-resolve-host-name -4 pindabackup.local | awk '{print $2}')
echo "pindabackup.local: $backupip"

mount -t cifs //$backupip/systems /mnt

echo "--------------------------------------------------------------------------------------"
echo "Overzicht NAS: ls -l /mnt/"
echo "Overzicht partities: sfdisk -l"
echo "Systeemberichten: dmesg -T"
echo "--------------------------------------------------------------------------------------"
echo "Backup Linux: fsarchiver savefs /mnt/systeem.part1.fsa /dev/part1"
echo "Backup Partitietabel: sfdisk -d /dev/schijf > /mnt/systeem.schijf.partition.table.txt"
echo "Bewerken: nano /mnt/systeem.schijf.partition.table.txt"
# https://kb.unixservertech.com/microsoft_windows/clone_disk_using_linux
echo "Backup NTFS: ntfsclone --save-image --output - /dev/part1 | bzip2 -c > /mnt/systeem.partition.bz2"
echo "--------------------------------------------------------------------------------------"
echo "Restore Linux: fsarchiver restfs /mnt/systeem.part1.fsa id=0,dest=/dev/part1"
echo "Partitioneren: sfdisk /dev/schijf < /mnt/systeem.schijf.partition.table.txt"
echo "Restore NTFS: bunzip2 -c /mnt/systeem.partition.bz2 | ntfsclone --restore-image --overwrite /dev/part1 -"

Nog handiger zou zijn deze opdrachten in de .bash_history op te slaan, waardoor je ze kunt uitvoeren, zonder ze te moeten intypen. Of door een keuzemenu aan te bieden. Maar dit gaat voor deze tip te ver.

Het SystemRescue systeem sluit je af met:

[root@sysrescue ~]# shutdown -h now

Opruimen

Daar we enkel gebruik maken van standaard in Debian Bookworm aanwezige software, hoeven we enkel het gedownloade SystemRescue ISO bestand te verwijderen:

dany@pindabook:~$ rm systemrescue-11.03-amd64.iso