I can tell you some simple code modifications and steps to recreate the pool without losing data. Do you have any Shares and data on them? If you don’t have any data, just wipe and recreate instead of import – you probably know this already, but just saying.
If you do have shares(aka subvolumes), they can also be recreated with a bit of tweaking. Let me know. I sure hope you don’t have snapshots to restore
The steps to recreate the pool would be great, thank you.
Try this and let me know. I tried to be very explicit and thorough, hope it works. Soon, we’ll make pool/share import automatic.
1. Get your pool name. “btrfs fi show” lists all pools. pool name is the Label. Yours should be Backup.
2. The output also lists devices in that pool, you probably know disk names already, but just confirm.
3. raid level is presumably raid1
4. Let’s also make sure that you haven’t mounted the pool manually before. From your comment earlier looks like you mounted it under /mnt and not /mnt2. Rockstor mounts pools under /mnt2. So umount any manual mounts. If you did mount Backup as /mnt2/Backup, you can leave it alone.
5. You don’t have to worry about compression or extra mount options you may have had from before – these can be reset later.
6. Turn off rockstor – systemctl stop rockstor
7. Open(to edit) /opt/rockstor/src/rockstor/storageadmin/views/pool.py (first make a copy of it just in case)
8. Line #191 should be “add_pool(p, dnames)”. Just comment it out by adding a # in front of the line. it should look like “#add_pool(p, dnames)”. Make sure you don’t break the indentation, it’s Python. maybe you already know this, I’m just being extra explicit.
9. Open(to edit) /opt/rockstor/src/rockstor/fs/btrfs.py (first make a copy of it just in case)
10. Line #615 defines a function that looks like:
disk = (’/dev/%s’ % disk)
return run_command([WIPEFS, ‘-a’, disk])
9. Change it to look like this (basically make it do nothing)
10. Open(to edit) /opt/rockstor/src/rockstor/storageadmin/views/disk.py (first make a copy of it just in case)
11. comment out line #48 and #49. These lines should look like the following
def get_queryset(self, *args, **kwargs):
#do rescan on get.
#with self._handle_exception(self.request): <— line 48
# self._scan() <— line 49
if (‘dname’ in kwargs):
12. Turn rockstor back on. (systemctl start rockstor)
13. Manually mount the pool with the command: mount /dev/disk/by-label/Backup /mnt2/Backup. Note that the mount point is /mnt2 and not /mnt like you mentioned in your earlier comment. If it’s already correctly mounted, move on.
13. Go to the Storage tab of the web-ui. You should see the two drives. Click on the wipe/eraser icon. This will just update the state of those disks without really wiping the disks because of the change you made in steps 9-11.
14. Now create the pool. Make sure you choose the same name, disks and raid level(raid1) as before. Just double check everything before hitting submit. It should happily create the pool.
15. Now, on to share restoration. Before we do anything turn off rockstor. systemctl stop rockstor
16. Execute the following command and you’ll see your shares: btrfs subvol list /mnt2/Backup. Gather all the names.
17. restore all changed code files back to how they were before. (/opt/rockstor/src/rockstor/storageadmin/views/pool.py, /opt/rockstor/src/rockstor/storageadmin/views/disk.py, /opt/rockstor/src/rockstor/fs/btrfs.py)
18. Turn rockstor back on. systemctl start rockstor
19. Go to storage tab of the web-ui and you should see the disks with right pool name populated in the table.
20. Now, create shares one by one. Just pick the right pool(Backup) and other fields don’t matter much. It should just work.
Ok, so since I care about the community so much :), I tested this out to make sure these steps work. However, please don’t hate me if they don’t work. Even if it bombs, your data should still be intact and we can further troubleshoot.
Thanks for taking the time to put all of that together and test it. Much appreciated!
Going to try and rebuild it. Will be the cleanest way. Thanks for all the help!