Darktable is an incredible RAW photo editor. As any RAW photo editor, it requires RAW files. I won't discuss here all the advantages of developing your photos from RAW files.
One of the side effects of using RAW files is that sooner than later, you will run out of space. A RAW file is a big file that has all the information the sensor captures, and because of that it is a big file. My Canon R6 delivers 20 Megapixels photos and each RAW file is around 19 MB.
You will be in a situation where you must move all your old photos to a larger storage: local or cloud-based. As you do this, you will find that Darktable breaks. Here is what I did to fix that.
Changing the Darktable Database
Happily for us, Darktable uses SQLite to store all the information. The film rolls' information is in the library.db file. If you are using Linux, you will find all the database files in the .config/darktable directory. Type the following sequence to see your current film rolls (do this with Darktable closed).
sqlite3 library.db
SELECT * FROM film_rolls;
You will see an output similar to this:
1|1715299935|/mnt/vault/Photos/CANON/200D/100CANON
2|1715299956|/mnt/vault/Photos/CANON/200D/100CANON.fernanda
3|1715299986|/mnt/vault/Photos/CANON/200D/101CANON
4|1715300002|/mnt/vault/Photos/CANON/200D/102CANON
5|1715300823|/mnt/vault/Photos/CANON/7D/100EOS7D
6|1715300839|/mnt/vault/Photos/CANON/90D/100CANON
7|1715300857|/mnt/vault/Photos/CANON/90D/100CANON.fernanda
8|1715300900|/mnt/vault/Photos/CANON/90D/101CANON
9|1715300918|/mnt/vault/Photos/CANON/90D/102CANON
10|1715300932|/mnt/vault/Photos/CANON/90D/103CANON
11|1715300948|/mnt/vault/Photos/CANON/90D/104CANON
12|1715301712|/mnt/vault/Photos/CANON/R/100CANON
13|1715301925|/mnt/vault/Photos/GOOGLE/2XL
14|1715302355|/mnt/vault/Photos/GOOGLE/3XL
15|1715302375|/mnt/vault/Photos/GOOGLE/4XL
16|1715302384|/mnt/vault/Photos/GOOGLE/5
17|1715302396|/mnt/vault/Photos/GOOGLE/6PRO
18|1715302752|/mnt/vault/Photos/RICOH/THETA Z1/100RICOH
19|1715303943|/mnt/vault/Photos/CANON/6D/100CANON
20|1715303953|/mnt/vault/Photos/CANON/6D/100CANON.fernanda
21|1715303964|/mnt/vault/Photos/CANON/6D/101CANON
22|1715303981|/mnt/vault/Photos/CANON/6D/101CANON.fernanda
23|1715303995|/mnt/vault/Photos/CANON/6D/102CANON
24|1715304012|/mnt/vault/Photos/CANON/6D/102CANON.fernanda
25|1715304027|/mnt/vault/Photos/CANON/6D/103CANON
26|1715304051|/mnt/vault/Photos/CANON/R6/100CANON
27|1715304073|/mnt/vault/Photos/CANON/R6/101CANON
28|1715304185|/mnt/vault/Photos/CANON/R6/102CANON
29|1715304754|/mnt/vault/Photos/CANON/R6/103CANON
30|1715305006|/mnt/vault/Photos/CANON/R6/104CANON
31|1715305750|/mnt/vault/Photos/CANON/R6/200CANON
32|1715307706|/mnt/vault/Photos/CANON/R6/201CANON
33|1715308413|/mnt/vault/Photos/GOOGLE/7PRO
34|1715308422|/mnt/vault/Photos/GOOGLE/8PRO
35|1715308456|/mnt/vault/Photos/RICOH/THETA Z1/100RICOH
sqlite>
If you know SQL, you can figure out the rest, all you need to know is you have to use the REPLACE() function. If you don't, keep reading.
Take note of the first column value of the film role you want to move. Then type something similar to this:
UPDATE film_rolls SET folder = REPLACE(folder, '/mnt/vault', '/mnt/larger-vault') WHERE id = 20;
In my case, this will move my film roll from /mnt/vault/Photos/CANON/6D/100CANON.fernanda to /mnt/larger-vault/Photos/CANON/6D/100CANON.fernanda. If you are moving all your rolls, you can skip the WHERE clause.
Change the paths to fit your system. You are all set.
Good luck!