Nevermind, what I ended up doing is restarting the container just after the drive has been mounted. Which is easy because it’s a systemd service so I could use ExecStartPost
Nevermind, what I ended up doing is restarting the container just after the drive has been mounted. Which is easy because it’s a systemd service so I could use ExecStartPost
Thanks for your answer. I tried mounting it to a folder inside the one I’m using in the compose file but strangely it didn’t work. So I thought that the only way that wouldn’t need to delay docker start is to restart the container just after the drive has been mounted.
And that’s what I ended up doing as the drive mount is a systemd service and therefore I can use ExecStartPost
to restart the container. That way this doesn’t affect other containers and also lets this one start even if the drive has not been mounted which I want in case there’s no internet connection
Thanks for your suggestion. That’s what I first thought but there are some issues.
I have other containers that do not require this drive to be mounted. Main problem is that if for some reason the drive cannot be mounted (e.g. no internet connection), then docker would not start any of those containers.
That’s why I need a particular solution. While writing this it has come my mind that I’ve got a container which mounts / as a read-only volume in its /mnt and it seems to work fine there. Maybe if I set the volume to mount /media/user instead of the drive it would work?
Don’t think it has to do with permissions as if I manually start the container after the drive gets mounted then everything goes as expected and the container has the files at /mnt
I mount it using rclone mount as a systemd service, just as they say in their guide
Here’s what I ended up doing:
When the SSD arrived, I put it in the 2nd slot. Then, I booted Ubuntu in a Live USB and created the same partition layout in the new disk with parted
.
cryptsetup
and mount it with the option luksOpen
of cryptsetup.Next thing was mounting the partitions of the old drive. And now, to clone the disk I first tried with brtfs-clone but as the size of what first were 220 GB increased to 260 GB, I tried just using btrfs send
from the old disk and piping it to btrfs receive
to the new disk. However the size didn’t change and still was 260GB, no idea why. I didn’t use dd
because some comments recommended btrfs send/receive as it doesn’t copy the whole partition including empty space.
Once that was done I copied the /boot/efi and /boot partitions using cp and changed the uuids in /etc/fstab
and /etc/crypttab
to match the new partitions UUIDs (to know which UUID was each partition, I just used blkid
and grep’ed the type of partition. For instance if I was looking for the new partition to replace the one with UUID a1b2c3, I would just use blkid | grep a1b2c3
and if it said it was a crypto partition, then blkid | grep crypto
). Finally I deleted the Microsoft folder from /boot/efi as I would only use that disk for Linux.
So then I tried booting from that disk (and removed the other) but Grub was a mess - it just showed the command line. After some (stressful) hours, I found out that it was because Grub itself when first installed saves the UUID of the disk where the config is and searches for it there - so it was not using the config in the new drive.
Again, booted Ubuntu and mounted the new drive partitions. There I tried to just reinstall Grub in the boot partition but it seemed impossible because of some weird errors. So I just changed the UUIDs in Grub related files such as /boot/grub/grub.cfg
and /etc/default/grub
.
Tried booting again but as noticed earlier Grub was not loading the config file I edited, it was still trying to use the old one in the old drive which was removed and had the original UUIDs. Maybe just changing the UUIDs there would have done the trick but I didn’t try.
It was in that moment that I discovered the existence of configfile
- a command that can be used from Grub’s shell to boot with the specified config file. Then I used configfile disk_and_path_to_grubcfg
and bang! The OS selection screen appeared. At that time I had already put the old disk in the other slot as I thought everything was solved.
To my surprise, when I selected to boot fedora and typed my password to decrypt the drive, I booted to Fedora in the old drive! How could that be, if I really made sure that I was booting Grub from the new disk? So now the problem was that I was booting Grub (manually with configfile) from the new disk but the OS I was booting was in the old one.
After some time researching, the culprit was that while I changed the UUIDs in the grub.cfg config file, Fedora doesn’t add its kernel entries to that file but to the /boot/loader/entries
directory. And there were the files I had to modify (just replacing the old UUIDs). One reboot (maybe also update-grub
to update Grub config) and that was it, solved.
However there was one more thing to do. As I didn’t want to use the configfile
command every time I boot, I just reinstalled grub.
So that was it. Hope it is useful for anyone who needs to do the same. Although the story doesn’t end there, because the new drive turned out to be defective and I had to order a new one to which I dd’ed (not going through all that again). You live and you learn!
I think I’ll take a backup then try to clone the disk with btrfs send/receive and keep that as a solution in case something goes wrong. Thanks for answering!
I see, I like this approach. However as Fedora installs Grub (and I don’t want to have a headache), I think I’ll stick with it. Thanks for sharing all your knowledge!
This is the first thing I thought. However I’m concerned about grub not recognising my partitions and causing my laptop to basically not boot. Did you have any problem with this? Also, if you copied the encrypted drive and kept it encrypted, was there any change you had to do?
Thanks for your answer. Would Grub still see everything as usual or is any change needed too? Also how would I go about having the same exact layout? Use the Fedora Installer on the new drive and put the same password for encryption, creating the same partitions and giving them the same size?
big time NO on clonezilla and friends.
Can you explain? Another comment recommended clonezilla. I remember reading something like this, but knowing more would be nice.
May I ask how you solved the screen sharing problems? Also do you use keybinds for apps such as discord? When I tried Hyprland none of them were working.
I managed to solve it by automatically restarting the container once the drive is mounted, as the mount is done by a systemd service. Guess there were no permission issues