Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

backing up all metadata for the plugin #47

Open
pasha-19 opened this issue Apr 20, 2023 · 2 comments
Open

backing up all metadata for the plugin #47

pasha-19 opened this issue Apr 20, 2023 · 2 comments

Comments

@pasha-19
Copy link

pasha-19 commented Apr 20, 2023

My goal is to be able to snapshot my jellyfin media and "metadata" to be able to rebuild my server on a new hardware instance if required.

I was hoping moving the jellyfin metadata directory such that it would be in the TrueNAS server's snapshot of a jellyfin dataset would be sufficient. I have determined that it is not. Particularly I have a known interest /var/db/jellyfinserver/collections, playlists and possibly Scheduled Tasks. I may well from other reading be interested in most of the /var/db/jellyfinserver directory (possibly excluding cache, if there and transcodes. Not your issue but I spent a week trying to mount my media directory into the jail (somewhat a newbie). Made the error of trying to mount a ZFS dataset with nested ZFS datasets -- took a week to find the one liner in the TrueNAS documentation that said that was a no-no. PS: I succeeded at knowing about mountpoints from installing a competing product. Your plugin not having predetermined and identified mountpoints slowed my progress somewhat. Not really your issue; other than I needed to figure out if it was necessary to create the empty directory using the jail shell before mounting the desired file. Maybe you could save me some time or maybe this affects your implementation of the plugin; I am not sure. I am considering creating a jellyfin dataset with nested datasets the first has what I call metadata (as the target of a mountpoint for /var/db/jellyfinserver) if that can be created before the install of your plugin and the initial population of that set of directories; the other dataset being my media files (mapped as just about anything reasonable like /srv/jellyfin (traditional) with /jellyfin also being an option). Using the jellyfin configuration options to relocate cache and transcodes outside the snapshot range is clearly something I can do; if necessary and desirable. If I cannot "premount" the /var/db/jellyfinserver dataset in advance perhaps the alternative is to stop the plugin & jail and recursively MOVE /var/db/jellyfinserver/* elsewhere; then perform the mount then recursively copy the previously moved contents back.

In the end, if I can do what I want and implement it will my TrueNAS server snapshot will enable me potentially to restore my entire configuration to your plugin (assuming the software version matches)? In addition selectively copying files off of such a backup should limit my requirements to configure a new jellyfin server on another platform and if I can match the media library path I should be able to restore items like collections and playlists based on the files in the snapshotted backup (along with the nfo files and images in the media directory.

Any suggestions about things I have missed would be appreciated.

Thanks for reading this; I hope it is not an abuse of this issue reporting mechanism.

My TrueNAS server has a AMD Ryzen 5 5600G with Radeon Graphics, if this is of interest in terms of hardware acceleration and someone will provide a testing procedure I could provide results, if needed (can switch threads if desired too)

@Thefrank
Copy link
Owner

I am starting the process of migrating off of TrueNAS to just FreeBSD but here is how I handled various apps with TrueNAS and iocage. You can skip to the end if you just want the jellyfin example :)

Here is how I have my configurations snapshotted for radarr:

iocage fstab -l radarr
+-------+---------------------------------------------------------------------------------------------------------------------------+
| INDEX |                                                        FSTAB ENTRY                                                        |
+=======+===========================================================================================================================+
| 0     | /mnt/ThingsGoHere/Apps/radarr/  /mnt/ThingsGoHere/iocage/jails/radarr/root/config       nullfs  rw      0       0         |
+-------+---------------------------------------------------------------------------------------------------------------------------+
| 1     | /mnt/ThingsGoHere/Downloads     /mnt/ThingsGoHere/iocage/jails/radarr/root/mnt/Downloads        nullfs  rw      0       0 |
+-------+---------------------------------------------------------------------------------------------------------------------------+
| 2     | /mnt/ThingsGoHere/Videos/Movies /mnt/ThingsGoHere/iocage/jails/radarr/root/mnt/Videos/Movies    nullfs  rw      0       0 |
+-------+---------------------------------------------------------------------------------------------------------------------------+

double checking that everything is as it should be

zfs list -t filesystem | grep Apps/radarr
ThingsGoHere/Apps/radarr                                          /mnt/ThingsGoHere/Apps/radarr
---
zfs list -t snapshot | grep radarr
ThingsGoHere/Apps/[email protected]                      4.91M      -      207M  -
ThingsGoHere/Apps/[email protected]                      3.33M      -      207M  -
ThingsGoHere/Apps/[email protected]                      3.29M      -      207M  -
ThingsGoHere/Apps/[email protected]                      3.38M      -      207M  -
ThingsGoHere/Apps/[email protected]                      3.31M      -      207M  -
ThingsGoHere/Apps/[email protected]                      3.30M      -      207M  -
ThingsGoHere/Apps/[email protected]                      3.30M      -      207M  -
ThingsGoHere/Apps/[email protected]                      1.76M      -      207M  -

The other *arrs are the same way each given a dataset under the "Apps" dataset and mounted as /config as I was lazy when setting this up originally. Applications that only need to READ data and not WRITE are given ro mount points. An example of how I had Plex setup:

+-------+-------------------------------------------------------------------------------------------------------------------+
| INDEX |                                                    FSTAB ENTRY                                                    |
+=======+===================================================================================================================+
| 0     | /mnt/ThingsGoHere/Apps/plex     /mnt/ThingsGoHere/iocage/jails/plex/root/config nullfs  rw      0       0         |
+-------+-------------------------------------------------------------------------------------------------------------------+
| 1     | /mnt/ThingsGoHere/Videos        /mnt/ThingsGoHere/iocage/jails/plex/root/mnt/Videos     nullfs  ro      0       0 |
+-------+-------------------------------------------------------------------------------------------------------------------+
| 2     | /mnt/ThingsGoHere/Music /mnt/ThingsGoHere/iocage/jails/plex/root/mnt/Music      nullfs  ro      0       0         |
+-------+-------------------------------------------------------------------------------------------------------------------+

same for plex:

zfs list -t filesystem | grep Apps/plex
ThingsGoHere/Apps/plex                                         /mnt/ThingsGoHere/Apps/plex

(I don't keep snapshots of Plex data as they are 100GB+ of metadata)

Now, on to jellyfin! This should all be doable in the GUI but I am going off the memory of a rarely used GUI and this uses my configuration example from above and how I would do the following:

(I think this would be under "Storage" in the GUI)

  • dataset: ThingsGoHere/Apps/jellyfin (this is technically a child dataset of "Apps")
    • child dataset: ThingsGoHere/Apps/jellyfin/db
    • child dataset ThingsGoHere/Apps/jellyfin/cache (optional)

(Jails?)
mount the dataset ThingsGoHere/Apps/jellyfin/db as /var/db/jellyfin (or however you have it configured in sysrc)
mount the dataset ThingsGoHere/Apps/jellyfin/cache as /var/cache/jellyfin (or however you have it configure in sysrc)

(Storage? Snapshots?)
Set the snapshot for ThingsGoHere/Apps/jellyfin. Make sure "recursive" is TRUE

(No idea, but should be supported. System?)
cron job for daily/weekly snapshot

@pasha-19
Copy link
Author

pasha-19 commented Apr 20, 2023 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants