Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?

I want to mount a previous Synology basic volume (wasn't using RAID or SHR) to copy data to a new drive.

Plug it in the USB port doesn't work, showing (Partition 1 does not start on phyical sector boundary).

# fdisk -l
Disk /dev/sdr: 2.7 TiB, 3000558944256 bytes, 5860466688 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device     Boot Start        End    Sectors Size Id Type
/dev/sdr1           1 4294967295 4294967295   2T ee GPT

Partition 1 does not start on physical sector boundary.

Calling mount would gives another error:

# mount /dev/sdr oldVolume/
mount: /dev/sdr: can't read superblock

The issue is that there is MD superblock at the beginning of the disk. This StackOverflow anwser provides a solution, which is to use a loop mount to mount a partition as a device and skip the superblock. If we use losetup /dev/loop0 /dev/sdd3 -o 1048576 directly, it is gonna mount the first partition, which is a 2.3G partition that contain system files (hidden from Synology UI). What I am interested in is the actual data partition. To find the offset for that, we can look at other drives that has similar partition structure:

# fdisk -l
Disk /dev/sda: 894.3 GiB, 960197124096 bytes, 1875385008 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x29b632b9

Device     Boot   Start        End    Sectors   Size Id Type
/dev/sda1          2048    4982527    4980480   2.4G fd Linux raid autodetect
/dev/sda2       4982528    9176831    4194304     2G fd Linux raid autodetect
/dev/sda3       9437184 1875180191 1865743008 889.7G fd Linux raid autodetect

/dev/sda is another 1T drive in the system. From the above, we can see the data partition starts at 9437184th block. Since we have 512 bytes per block, the byte offset for the data partition is 9437184 * 512 = 4831838208. Thus we can use the following to mount the partition (make sure /dev/loop1000 and /dev/md1000 don't exist):

losetup /dev/loop1000 /dev/sdr -o 4831838208
mdadm --assemble --run /dev/md1000 /dev/loop1000
mount /dev/loop1003 /mnt/oldVolume
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.