geerlingguy / rpi-clone

A shell script to clone a booted disk on a Raspberry Pi.
https://rpi-clone.jeffgeerling.com/
BSD 3-Clause "New" or "Revised" License
172 stars 10 forks source link

[Bug] Incorrectly parsing filesystem label... #27

Open OdinVex opened 1 month ago

OdinVex commented 1 month ago

Filesystem labels are allowed spaces. The script is passing the new label unquoted/unescaped, so it ends up being mkfs -t ext4 -L NEW NAME /dev/nvme0n1p2 and failing.

framps commented 1 month ago

@OdinVex Would you please test the fix in this branch before it's merged into master?

OdinVex commented 1 month ago

@framps, I manually moved it already and erased the original medium. If I had another set of devices I would. Looking at your modifications, I don't think the dev needs quotations. I've never seen any /dev/ path have spaces.

framps commented 1 month ago

I don't think the dev needs quotations.

Agree. But it's good programming practice to enclose variable names all the time with double quotes. That's why I added the double quotes also for the device.

OdinVex commented 1 month ago

I don't think the dev needs quotations.

Agree. But it's good programming practice to enclose variable names all the time with double quotes. That's why I added the double quotes also for the device.

While usually true, some tools don't parse quotes and end up trying to use them as part of the variable or name. I've tested the command on a thumb drive, it works (such as sudo mkfs -t ext4 -L "Test1 Test2" "/dev/sde1")

aaronmee commented 1 month ago

I tried the fix with using "Kingston 240GB" as label, but it still failed.

OdinVex commented 1 month ago

I tried the fix with using "Kingston 240GB" as label, but it still failed.

Did you use the issue27 branch? It's required to test it (or modify the script manually).

aaronmee commented 1 month ago

@OdinVex I used git clone -b issue27 https://github.com/framps/rpi-clone.git to download the script

framps commented 1 month ago

@aaronmee Are you sure your issue is because of the space in the label? Please label your device with a label without spaces (Kingston240GB) and try again to double check.

OdinVex commented 1 month ago

@aaronmee, Could we see the error messages too, to see if quotes around /dev wasn't a factor?

aaronmee commented 1 month ago

@framps I'm pretty shure it's space-related, because just Kingston worked. @OdinVex well now it somehow got one step further, but generated a whole lot more errors

aaron@aaronpi:~/Downloads/rpi-clone $ sudo ./rpi-clone sda

Booted disk: mmcblk0 128.2GB               Destination disk: sda 240.1GB
---------------------------------------------------------------------------
Part               Size    FS     Label           Part   Size  FS  Label
1 /boot/firmware   512.0M  fat32  --
2 root             118.9G  ext4   rootfs
---------------------------------------------------------------------------
== Initialize: IMAGE partition table - partition number mismatch: 2 -> 0 ==
1 /boot/firmware      (63.0M used)   : MKFS  SYNC to sda1
2 root                (32.8G used)   : RESIZE  MKFS  SYNC to sda2
---------------------------------------------------------------------------
Run setup script       : no.
Verbose mode           : no.
-----------------------:
** WARNING **          : All destination disk sda data will be overwritten!
-----------------------:

Initialize and clone to the destination disk sda?  (yes/no): yes
Optional destination ext type file system label (16 chars max): Kingston 240GB

Initializing
  Imaging past partition 1 start.
  => dd if=/dev/mmcblk0 of=/dev/sda bs=1M count=8 ...
  Resizing destination disk last partition ...
    Resize success.
  Changing destination Disk ID ...
  => mkfs -t vfat -F 32  /dev/sda1 ...
  => mkfs -t ext4 -L Kingston 240GB /dev/sda2 ...

Syncing file systems (can take a long time)
Syncing mounted partitions:
  Mounting /dev/sda2 on /mnt/clone
  => rsync // /mnt/clone with-root-excludes ...
  Mounting /dev/sda1 on /mnt/clone/boot/firmware
  => rsync /boot/firmware/ /mnt/clone/boot/firmware  ...rsync: [generator] readlink_stat("/mnt/clone/boot/firmware/System Volume Information") failed: Input/output error (5)
rsync: [generator] delete_file: unlink(overlays/arducam-pivariety.dtbo) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(overlays/applepi-dac.dtbo) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(overlays/apds9960.dtbo) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(overlays/anyspi.dtbo) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(overlays/allo-piano-dac-plus-pcm512x-audio.dtbo) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(overlays/allo-piano-dac-pcm512x-audio.dtbo) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(overlays/allo-katana-dac-audio.dtbo) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(overlays/allo-digione.dtbo) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(overlays/allo-boss2-dac-audio.dtbo) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(overlays/allo-boss-dac-pcm512x-audio.dtbo) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(overlays/akkordion-iqdacplus.dtbo) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(overlays/adv728x-m.dtbo) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(overlays/adv7282m.dtbo) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(overlays/ads7846.dtbo) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(overlays/ads1115.dtbo) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(overlays/ads1015.dtbo) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(overlays/adau7002-simple.dtbo) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(overlays/adau1977-adc.dtbo) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(overlays/adafruit18.dtbo) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(overlays/adafruit-st7735r.dtbo) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(overlays/act-led.dtbo) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(overlays/README) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(start_x.elf) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(start_db.elf) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(start_cd.elf) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(start4x.elf) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(start4db.elf) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(start4cd.elf) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(start4.elf) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(start.elf) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(kernel_2712.img) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(kernel8.img) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(issue.txt) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(initramfs_2712) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(initramfs8) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(fixup_x.dat) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(fixup_db.dat) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(fixup_cd.dat) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(fixup4x.dat) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(fixup4db.dat) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(fixup4cd.dat) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(fixup4.dat) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(fixup.dat) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(config.txt) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(cmdline.txt) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(bootcode.bin) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(bcm2712d0-rpi-5-b.dtb) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(bcm2712-rpi-cm5-cm5io.dtb) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(bcm2712-rpi-cm5-cm4io.dtb) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(bcm2712-rpi-5-b.dtb) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(bcm2711-rpi-cm4s.dtb) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(bcm2711-rpi-cm4.dtb) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(bcm2711-rpi-cm4-io.dtb) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(bcm2711-rpi-400.dtb) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(bcm2711-rpi-4-b.dtb) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(bcm2710-rpi-zero-2.dtb) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(bcm2710-rpi-zero-2-w.dtb) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(bcm2710-rpi-cm3.dtb) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(bcm2710-rpi-3-b.dtb) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(bcm2710-rpi-3-b-plus.dtb) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(bcm2710-rpi-2-b.dtb) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(bcm2709-rpi-2-b.dtb) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(bcm2708-rpi-zero.dtb) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(bcm2708-rpi-zero-w.dtb) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(bcm2708-rpi-cm.dtb) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(bcm2708-rpi-b.dtb) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(bcm2708-rpi-b-rev1.dtb) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(bcm2708-rpi-b-plus.dtb) failed: Read-only file system (30)
rsync: [generator] delete_file: unlink(LICENCE.broadcom) failed: Read-only file system (30)
cannot delete non-empty directory: overlays
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1338) [sender=3.2.7]

Editing /mnt/clone/etc/fstab PARTUUID to use 057cc7b5
===============================
Done with clone to /dev/sda
   Start - 22:14:25    End - 22:15:09    Elapsed Time - 0:44

Cloned partitions are mounted on /mnt/clone for inspection or customizing.

Hit Enter when ready to unmount the /dev/sda partitions ...

When inspecting the disk before unmounting with blkid, I see that the label is just Kingston

OdinVex commented 1 month ago

=> mkfs -t ext4 -L Kingston 240GB /dev/sda2 ... Doesn't show quotes, curious about that. I'd also restore to a dd-backup before attempting multiple times. (rpi-clone failed badly on a new NVMe for me but I always keep entire disk backups before doing stuff like this.)

framps commented 1 month ago
            printf "  => mkfs -t $mkfs_type $label $dst_dev ..."

This statement does not display any quotes. But following command

            yes | mkfs -t $mkfs_type "$label" "$dst_dev" &>> /tmp/$PGM-output

will use double quotes. There seems to be another issue. I suggest to label the device with a label without a space and try again.

OdinVex commented 1 month ago

          printf "  => mkfs -t $mkfs_type $label $dst_dev ..."

Ah right, I was up all night and sick, not entirely functional yet. I'd add quotes to that too. I think double-quoting to escape here, so: printf " => mkfs -t $mkfs_type -L ""$label"" ""$dst_dev"" ..." It's also missing -L, I added it here. Might verify other locations for -L.