Hello,
I think that there is an error in the nc-restore-snapshot.sh script.
This script tries to delete the data directory, not the mount point on witch the data directory lives.
The issue is pretty much the same as #1508
Steps to reproduce:
I installed NextCloudPi_RaspberryPi_v1.52.2.zip on a RaspberryPi 4 8Gb.
Inserted a usb flash drive and formated it via the web interface's nc-format-USB page with a label of "myCloudDrive"
Moved the nextcloud data dir to "/media/USBdrive/ncdata" (the default) via the web interface's nc-datadir page.
This made a symlink of "/media/USBdrive" pointing to "/media/myCloudDrive"
Moved NextCloud's data dir via web interface's nc-datadir to "/media/USBdrive/ncdata"
Moved MariaDB's datadir via web interface's nc-database to "/media/USBdrive/ncdatabase" Warning this has nothing to do with the issue, but just sharing all steps.
Uploaded a few files in nextcloud
Created a BTRFS snapshot via web interface's nc-snapshot. This created a snapshot "manual_2023-09-22_215641" in "/media/myCloudDrive/ncp-snapshots"
root@nextcloudpi:/media/myCloudDrive/ncp-snapshots# btrfs subvolume show /media/myCloudDrive/ncp-snapshots/manual_2023-09-22_215641
ncp-snapshots/manual_2023-09-22_215641
Name: manual_2023-09-22_215641
UUID: ec88b6d6-02c8-7d40-b036-38bb4f598407
Parent UUID: 7ca578b9-c2b7-9b48-a88f-9323daf7e379
Received UUID: -
Creation time: 2023-09-22 21:56:41 +0100
Subvolume ID: 259
Generation: 192
Gen at creation: 105
Parent ID: 5
Top level ID: 5
Flags: readonly
Snapshot(s):
ncdata
root@nextcloudpi:/media/myCloudDrive/ncp-snapshots# btrfs subvolume list /media/myCloudDrive
ID 259 gen 192 top level 5 path ncp-snapshots/manual_2023-09-22_215641
ID 260 gen 118 top level 5 path ncp-snapshots/autobackup_2023-09-22_220414
ID 261 gen 121 top level 5 path ncp-snapshots/autobackup_2023-09-22_220636
ID 262 gen 126 top level 5 path ncp-snapshots/autobackup_2023-09-22_221342
ID 263 gen 130 top level 5 path ncp-snapshots/autobackup_2023-09-22_221748
ID 264 gen 131 top level 5 path ncp-snapshots/autobackup_2023-09-22_221843
ID 265 gen 132 top level 5 path ncp-snapshots/autobackup_2023-09-22_221903
ID 266 gen 145 top level 5 path ncp-snapshots/autobackup_2023-09-24_111504
ID 267 gen 149 top level 5 path ncp-snapshots/autobackup_2023-09-24_112121
ID 268 gen 156 top level 5 path ncp-snapshots/autobackup_2023-09-24_120049
ID 269 gen 161 top level 5 path ncp-snapshots/autobackup_2023-09-24_121324
ID 270 gen 164 top level 5 path ncp-snapshots/autobackup_2023-09-24_121658
ID 271 gen 169 top level 5 path ncp-snapshots/autobackup_2023-09-24_130026
ID 272 gen 170 top level 5 path ncp-snapshots/autobackup_2023-09-24_130027
ID 273 gen 174 top level 5 path ncp-snapshots/autobackup_2023-09-24_130412
ID 274 gen 177 top level 5 path ncp-snapshots/autobackup_2023-09-24_132620
ID 276 gen 191 top level 5 path ncp-snapshots/autobackup_2023-09-24_133514
ID 277 gen 204 top level 5 path ncdata
Then deleted all files from nextcloud and proceeded with restoring from the manual snapshot.
If you open the web interface and try "nc-restore-snapshot" with a snapshot path of "/media/myCloudDrive/ncp-snapshots/manual_2023-09-22_215641"
The nc-restore-snapshot.sh script will fail with "ERROR: Not a Btrfs subvolume: Invalid argument"
On line 19 the script get NextCloud's data dir with a debug of the php script it takes it via:
sudo -u www-data php -r 'include("/var/www/nextcloud/config/config.php"); echo($CONFIG["datadirectory"]);'
Same could be done via
ncc config:system:get datadirectory
Then on line 25 it proceeds to determine the data dir's mount point and this correctly returns and stores "/media/myCloudDrive/ncdata" inside the mountpoint variable.
root@nextcloudpi:/media/myCloudDrive/ncp-snapshots# stat -c "%m" "/media/myCloudDrive/ncdata/data"
/media/myCloudDrive/ncdata
The automatic snapshot generation on line 37 passes correctly.
And then the problem comes.
btrfs subvolume delete "$datadir"
Tries to delete "/media/myCloudDrive/ncdata/data" and this is NOT a BTRFS volume and it throws the error.
Instead the BTRFS volume is "/media/myCloudDrive/ncdata" that contains a "data" folder inside.
Hello, I think that there is an error in the nc-restore-snapshot.sh script. This script tries to delete the data directory, not the mount point on witch the data directory lives. The issue is pretty much the same as #1508
Steps to reproduce:
This happens because on line 40 https://github.com/nextcloud/nextcloudpi/blob/master/bin/ncp/BACKUPS/nc-restore-snapshot.sh#L40 the "btrfs subvolume delete" is issued against $datadir instead of what I believe to be correct $mountpoint.
On line 19 the script get NextCloud's data dir with a debug of the php script it takes it via:
sudo -u www-data php -r 'include("/var/www/nextcloud/config/config.php"); echo($CONFIG["datadirectory"]);'
Same could be done via
ncc config:system:get datadirectory
Then on line 25 it proceeds to determine the data dir's mount point and this correctly returns and stores "/media/myCloudDrive/ncdata" inside the mountpoint variable.
The automatic snapshot generation on line 37 passes correctly. And then the problem comes.
btrfs subvolume delete "$datadir"
Tries to delete "/media/myCloudDrive/ncdata/data" and this is NOT a BTRFS volume and it throws the error. Instead the BTRFS volume is "/media/myCloudDrive/ncdata" that contains a "data" folder inside.
Modifying lines 40 and 41 of the script to state:
Fixes this problem and now restoring from a manual and automatic snapshots works as expected.