> For the complete documentation index, see [llms.txt](https://ayakaleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ayakaleaf-pro.ayaka.space/on-premises/da/support/support-guides/v5.5.7-migration-binary-files-migration.md).

# (v5.5.7-migrering) Migrering af binære filer

## Migrering af binære filer

Den kommende større version `6.0` udgivelsen af Server Pro og Community Edition vil halvere lagerforbruget for binære filer. En online migrering er inkluderet i version `5.5.7` , hvilket muliggør minimal nedetid som en del af opgraderingen.

Siden Server Pro `4.x`, gemmes binære filer to gange: i det aktive fillager i "filestore" og i det fulde projekthistoriksystem. Fremover vil der blive gemt én kopi af hver fil i det fulde projekthistoriksystem.

Migreringen til det samlede lagersystem består af to dele: et nyt flag til styring af migreringens fase og et script, der behandler alle aktive og soft-slettede projekter.

Faser:

* `OVERLEAF_FILESTORE_MIGRATION_LEVEL=0` (standard), læses og skrives filer til filestore. Filer skrives asynkront til historikken.
* `OVERLEAF_FILESTORE_MIGRATION_LEVEL=1` , læses filer fra historikken med fallback til filestore og skrives til både filestore og historikken. Nedgradering til `OVERLEAF_FILESTORE_MIGRATION_LEVEL=0` er mulig.
* `OVERLEAF_FILESTORE_MIGRATION_LEVEL=2` filer læses og skrives kun til historikken. Nedgradering til `OVERLEAF_FILESTORE_MIGRATION_LEVEL=1` er ikke mulig, medmindre den blev udført "offline".

Når data gemmes i [S3](https://docs.overleaf.com/on-premises/configuration/overleaf-toolkit/s3) og der bruges separate tjenestekonti til filestore (`OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID`) og historik (`OVERLEAF_HISTORY_S3_ACCESS_KEY_ID`): Giv filestore-brugeren læseadgang til historik-bøtten for blobs `OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET` . Filestore-tjenesten vil fremover levere læsninger fra compiler-tjenesten.

{% hint style="warning" %}
Det anbefales på det kraftigste at udføre migreringen af binære filer først i et ikke-produktions-/sandkassemiljø.
{% endhint %}

{% hint style="success" %}
Standard Server Pro-licensen giver dig lov til at køre applikationen i et produktionsmiljø samt i et ikke-produktions-/sandkassemiljø; det anbefales på det kraftigste, at du opretter et ikke-produktionsmiljø til test.
{% endhint %}

{% hint style="info" %}
Hvis du opgraderer til Server Pro/CE-version `6.0` og senere beslutter, at du vil nedgradere til en tidligere version, bør du gendanne fra en fuld systemsikkerhedskopi.
{% endhint %}

### Migreringsprocedure

{% stepper %}
{% step %}

#### Opret en sikkerhedskopi

Opret en fuld [sikkerhedskopi](https://docs.overleaf.com/on-premises/maintenance/data-and-backups#performing-a-consistent-backup) af din instans med et konsistent snapshot af **mongo**, **redis** og **sharelatex** mapperne.
{% endstep %}

{% step %}

#### Opdater

**Værktøjssæt:** Brug `$ bin/upgrade` script til opgradering af **værktøjssættet** til den nyeste version. Når du bliver bedt om det, skal du ikke **ikke** bekræfte prompten **Opgrader** image? — rediger i stedet manuelt **config/version** filen og sæt værdien til `5.5.7`.

**Ældre docker-compose.yml:** Opdater versionen af `sharelatex` tjenesten til `5.5.7`.
{% endstep %}

{% step %}

#### Estimer antallet af berørte projekter

{% code overflow="wrap" %}

```bash
# Overleaf Toolkit-brugere:
$ bin/docker-compose exec sharelatex /bin/bash -c "source /etc/overleaf/env.sh && source /etc/container_environment.sh && cd /overleaf/services/history-v1 && /sbin/setuser www-data node storage/scripts/back_fill_file_hash.mjs --report"

# Brugere af ældre docker-compose.yml:
$ docker compose exec sharelatex /bin/bash -c "source /etc/overleaf/env.sh && source /etc/container_environment.sh && cd /overleaf/services/history-v1 && /sbin/setuser www-data node storage/scripts/back_fill_file_hash.mjs --report"
```

{% endcode %}

Eksempel på output:

{% code fullWidth="false" %}

```
Nuværende status:
- Samlet antal projekter: 10
- Samlet antal slettede projekter: 5
Sampler 1000 projekter for at estimere fremdrift...
Statistik for udtagne projekter:
- Udtagne projekter: 9 (90 % af alle projekter)
- Udtagne projekter med alle hashes til stede: 5
- Procentdel af projekter, der kræver tilbageskrevne hashes: 44 % (estimeret)
- Udtagne projekter har 11 filer, der skal kontrolleres mod det fulde projekthistoriksystem.
- Udtagne projekter har 3 filer, der skal uploades til det fulde projekthistoriksystem (estimerer 27 % af alle filer).
Statistik for udtagne slettede projekter:
- Udtagne slettede projekter: 4 (80 % af alle slettede projekter)
- Udtagne slettede projekter med alle hashes til stede: 3
- Procentdel af slettede projekter, der kræver tilbageskrevne hashes: 25 % (estimeret)
- Udtagne slettede projekter har 2 filer, der skal kontrolleres mod det fulde projekthistoriksystem.
- Udtagne slettede projekter har 1 filer, der skal uploades til det fulde projekthistoriksystem (estimerer 50 % af alle filer).
```

{% endcode %}
{% endstep %}

{% step %}

#### Tøm køerne for projekthistorik

{% code overflow="wrap" %}

```bash
# Overleaf Toolkit-brugere:
$ bin/docker-compose exec sharelatex /overleaf/bin/flush-history-queues

# Brugere af ældre docker-compose.yml:
$ docker compose exec sharelatex /overleaf/bin/flush-history-queues
```

{% endcode %}

Gentag tømningen, indtil alle projekter er blevet tømt (`"project_ids":0`).

```
found projects {"project_ids":0,"limit":100000,"ts":"2025-09-01T10:35:33.353Z"}
total {"succeededProjects":0,"failedProjects":0}
```

{% hint style="danger" %}
Hvis "failedProjects" ikke er nul, bedes du kontakte support og ikke fortsætte med migreringen af binære filer.
{% endhint %}
{% endstep %}

{% step %}

#### Fremryk migreringsfasen til 1

Værktøjssæt: Sæt `OVERLEAF_FILESTORE_MIGRATION_LEVEL=1` i `config/variables.env`.

Ældre docker-compose.yml: Sæt `OVERLEAF_FILESTORE_MIGRATION_LEVEL: '1'` i `miljø` sektionen af `sharelatex` tjeneste.
{% endstep %}

{% step %}

#### Anvend konfigurationsændringen, og start instansen

Værktøjssæt: `bin/up -d`

Ældre docker-compose.yml: `docker compose up -d`
{% endstep %}

{% step %}

#### Kontrollér adgang til binære filer

Åbn et projekt i Overleaf-editoren i browseren, og vælg en binær fil, som f.eks. et billede.
{% endstep %}

{% step %}

#### Kør migreringsscriptet

{% code overflow="wrap" %}

```bash
# Overleaf Toolkit-brugere:
$ bin/docker-compose exec sharelatex /bin/bash -c "source /etc/overleaf/env.sh && source /etc/container_environment.sh && cd /overleaf/services/history-v1 && /sbin/setuser www-data node storage/scripts/back_fill_file_hash.mjs --all"

# Brugere af ældre docker-compose.yml:
$ docker compose exec sharelatex /bin/bash -c "source /etc/overleaf/env.sh && source /etc/container_environment.sh && cd /overleaf/services/history-v1 && /sbin/setuser www-data node storage/scripts/back_fill_file_hash.mjs --all"
```

{% endcode %}

{% hint style="danger" %}
Hvis du [gemmer log](https://docs.overleaf.com/on-premises/configuration/overleaf-toolkit/logging#persisting-logs) filer uden for **sharelatex** containeren, skal du sikre dig, at ejeren af log-mappen er sat til `www-data` brugeren (uid=33), så den udskrevne logfil kan skrives.
{% endhint %}

Outputtet bør se sådan ud:

```bash
Sæt UV_THREADPOOL_SIZE=16
{"name":"default","hostname":"c25e9faaeb53","pid":971,"level":30,"backend":"fs","msg":"Loading backend","time":"2025-07-25T15:00:58.166Z","v":0}
Skriver logger til /var/log/overleaf/file-migration-2025-07-25T15_00_58_199Z.log
Starter sikkerhedskopi af projektfiler...
Indlæste globale blobs: 0
Behandler ikke-slettede projekter...
Behandlede 1 projekter, forløbet tid 0s
Færdig med at opdatere aktive projekter
Behandler slettede projekter...
Samlingen deletedProjects ser ud til at være tom.

Færdig med at opdatere slettede projekter
Færdig.

```

Hvis migreringen lykkes, får du en exitkode på `0`, og de sidste linjer vil angive, at der ikke var nogen fejl:

```bash
Færdig.
```

Logfilen vil se sådan ud (brug den sti, som scriptet udskriver):

{% code overflow="wrap" %}

```bash
$ docker cp sharelatex:/var/log/overleaf/file-migration-2025-07-25T15_00_58_199Z.log .
$ cat file-migration-2025-07-25T15_00_58_199Z.log
{"name":"file-migration","hostname":"c25e9faaeb53","pid":971,"level":30,"end":"68839a8f577b9f009d947b27 (2025-07-25T14:54:07.000Z)","msg":"actually completed batch","time":"2025-07-25T15:00:58.379Z","v":0}
{"name":"file-migration","hostname":"c25e9faaeb53","pid":971,"level":30,"time":"2025-07-25T15:00:58.383Z","LOGGING_IDENTIFIER":"4effa2000000000000000000","projects":1,"blobs":6,"filesWithHash":5,"filesWithoutHash":2,"filesDuplicated":0,"filesRetries":0,"filesFailed":0,"fileTreeUpdated":0,"badFileTrees":0,"globalBlobsCount":0,"globalBlobsEgress":0,"projectDeleted":0,"projectHardDeleted":0,"fileHardDeleted":0,"mongoUpdates":1,"readFromGCSCount":7,"readFromGCSIngress":28532,"writeToGCSCount":5,"writeToGCSEgress":300,"readFromGCSThroughputMiBPerSecond":0.14925639825786063,"eventLoop":{"idle":48.277844,"active":381.53244699971054,"utilization":0.8876763888372498},"diff":{"eventLoop":{"idle":48.223536,"active":134.04030200059555,"utilization":0.7354190687027976},"projects":1,"blobs":6,"filesWithHash":5,"filesWithoutHash":2,"filesDuplicated":0,"filesRetries":0,"filesFailed":0,"fileTreeUpdated":0,"badFileTrees":0,"globalBlobsCount":0,"globalBlobsEgress":0,"projectDeleted":0,"projectHardDeleted":0,"fileHardDeleted":0,"mongoUpdates":1,"readFromGCSCount":7,"readFromGCSIngress":28532,"writeToGCSCount":5,"writeToGCSEgress":300,"readFromGCSThroughputMiBPerSecond":0.14925639825786063},"deferredBatches":[],"msg":"file-migration stats","v":0}
```

{% endcode %}
{% endstep %}

{% step %}

#### Stop instansen

Værktøjssæt: `bin/stop sharelatex`

Ældre docker-compose.yml: `docker compose stop sharelatex`
{% endstep %}

{% step %}

#### Gør gamle filer utilgængelige for applikationen

Du kan nu flytte de gamle filer til sekundærlager. Vi anbefaler at beholde filerne et stykke tid i tilfælde af, at der opstår problemer senere.

{% code overflow="wrap" %}

```bash
# Brugere af værktøjssættet:
$ bin/docker-compose run --rm --entrypoint mv sharelatex --no-clobber --verbose /var/lib/overleaf/data/user_files /var/lib/overleaf/data/old_user_files

# Brugere af ældre docker-compose.yml:
# Vi antager, at du bruger standard bind-mount i /var/lib/overleaf
$ docker compose run --rm --entrypoint mv sharelatex --no-clobber --verbose /var/lib/overleaf/data/user_files /var/lib/overleaf/data/old_user_files
# Hvis du bruger selektive bind-mounts, kan du blot fjerne bind-mounten for /var/lib/overleaf/data/user_files inde i containeren.
```

{% endcode %}
{% endstep %}

{% step %}

#### Fremryk migreringsfasen til 2

Værktøjssæt: Sæt `OVERLEAF_FILESTORE_MIGRATION_LEVEL=2` i `config/variables.env`.

Ældre docker-compose.yml: Sæt `OVERLEAF_FILESTORE_MIGRATION_LEVEL: '2'` i `miljø` sektionen af `sharelatex` tjeneste.
{% endstep %}

{% step %}

#### Anvend konfigurationsændringen, og start instansen

Værktøjssæt: `bin/up -d`

Ældre docker-compose.yml: `docker compose up -d`
{% endstep %}

{% step %}

#### Kontrollér adgang til binære filer

Åbn et projekt i Overleaf-editoren i browseren, og vælg en binær fil, som f.eks. et billede.
{% endstep %}
{% endstepper %}

#### offline migrering

Hvis du vil forhindre brugere i at kunne logge ind, mens scriptet til migrering af binære filer kører, skal du følge disse trin:

* Log ind på din Overleaf-instans med en administratorkonto
* Klik på **Admin** knappen og vælge **Administrer site**
* Klik på **Åbn/Luk editor** fanen
* Klik på **Luk editor** knappen
* Klik på **Afbryd forbindelsen for alle brugere** knappen

Når dette er gjort, vil eventuelle brugere, der er logget ind, blive omdirigeret til vedligeholdelsessiden, og nye brugere, der besøger login-siden, vil se vedligeholdelsessiden og **vil ikke** kunne logge ind.

Du skal gentage disse trin, når du genstarter instansen. For at åbne sitet igen skal du blot genstarte instansen.

#### Online migrering

Det er muligt at køre migreringsscripts, mens applikationen stadig kører. Der er nogle forhold, du skal tage højde for:

* Migreringsprocessen er IO-intensiv, så du bør overvåge ressourceforbruget, mens scriptet kører.
* Med høj behandlingsparallelitet kan event loop'et i `filestore` tjenesten opleve noget blokering, hvilket vil føre til en forringet brugeroplevelse. Vi anbefaler at starte med standardværdierne for `--concurrency=10` og `--concurrent-batches=1` .
* Du kan stoppe scriptet når som helst. Hvis du starter det igen, vil det validere de tidligere projekter og springe filer over, som allerede er blevet behandlet. Dette er nyttigt, hvis du foretrækker at køre migreringen på mindre travle tidspunkter (f.eks. om natten).

Vores anbefaling er at lukke sitet og køre migreringen offline i et vedligeholdelsesvindue, når dit projekttal er færre end 1000 projekter (se output fra migreringsscriptet, når det køres med `--report`). Hvis antallet af projekter er stort, kan du køre scriptet og overvåge dets fremdrift og derefter beslutte, om du vil fortsætte med at køre det online eller offline, afhængigt af din konkrete situation.

#### Ryd op i ældre data for binære filer

Når du er færdig med migreringen og har bekræftet, at projekter stadig kan få adgang til alle deres filer, kan du fjerne den gamle fillagring i `/var/lib/overleaf/data/user_files`. Vi anbefaler kraftigt at beholde disse filer et stykke tid - du kan gøre dem utilgængelige for applikationen ved først at omdøbe mappen.

### Fejlfinding

Vi vil tilføje råd om fejlfinding her. Bemærk venligst, at selvom vi normalt kun tilbyder support til Server Pro-kunder, vil vi på grund af denne migrerings karakter også gøre vores bedste for at støtte CE-kunder, som oplever problemer, der er specifikke for migreringen af binære filer.

Hvis scriptet til migrering af binære filer fejler (dvs. afsluttes med en fejl eller udskriver et antal mislykkede projekter, der er større end nul), bedes du sende følgende oplysninger til vores supportteam via e-mail [support+filestoremigration@overleaf.com](mailto:support+filestoremigration@overleaf.com?subject=Binary%20file%20migration%20problem\&body=Instance%20Type%3A%20CE%20or%20Server%20Pro%20%28delete%20as%20appropriate%29%0A%0AInstallation%20Type%3A%20Overleaf%20toolkit%20or%20docker-compose.yml%20or%20other%20%28delete%20as%20appropriate%29%0A%0AScript%20output%3A%0A%0Abin%2Fdoctor%20output%20%28if%20using%20toolkit%29%3A%0A), med følgende detaljer:

Emne: Problem med migrering af binære filer

Brødtekst:

* Instanstype: CE eller Server Pro (slet det, der ikke er relevant)
* Installationstype: Overleaf toolkit eller `docker-compose.yml` eller andet (slet det, der ikke er relevant)
* Version: 5.5.x (værktøjssæt: `$ cat config/version`)
* Output fra migreringsscriptet (som bør være placeret i containeren under `/var/log/overleaf`)
* Rapport: (kør migreringsscriptet med `--report`)
* Behandlede projekter: (som i scriptets seneste kørsel)
* Varighed af migreringen:
* `bin/doctor` output (når du bruger toolkit)
* Toolkit-version: `$ git rev-parse HEAD` (når du bruger Toolkit)

Overvej at vedhæfte logfilerne for `filestore` tjenesten til e-mailen. Du kan finde den på `/var/log/overleaf/filestore.log` inde i `sharelatex` containeren og eksportér dem sådan her:

```bash
$ docker cp sharelatex:/var/log/overleaf/filestore.log .
# erstat <timestamp> med tidsstemplet som udskrevet af scriptet
$ docker cp sharelatex:/var/log/overleaf/file-migration-<timestamp>.log .
```

Fjern venligst følsomme oplysninger fra logfilerne, før du vedhæfter dem.

#### Manglende filer

Ældre versioner af Server Pro/CE oprettede filtræsposter, før brugeruploads var færdige, hvilket kunne få filer til at se ud som om de manglede, når en upload fejlede. Du kan muligvis finde nogle få af disse tilfælde rapporteret som fejl, når alle filtræerne behandles.

Hvis antallet af manglende filer er lavt, kan du overveje manuelt at gennemgå disse tilfælde og slette dem fra editoren i browseren.

Hvis antallet af manglende filer er højt, kan du overveje at kontakte support; se e-mail-skabelonen ovenfor.

#### Find brudte filtræer

Migreringen kan fejle for projekter, der har et misdannet filtræ (for eksempel hvor filnavnene er tomme). Du kan finde en liste over disse problemer ved hjælp af `find_malformed_filetrees` scriptet, som kontrollerer alle projekter i databasen:

{% code overflow="wrap" %}

```bash
$ bin/docker-compose exec sharelatex /bin/bash -c "cd /overleaf/services/web && /sbin/setuser www-data node scripts/find_malformed_filetrees.mjs > /tmp/malformed-file-trees.json"
```

{% endcode %}

For at rette de ugyldige stier skal du bruge `fix_malformed_filetree` scriptet og køre kommandoen én gang for hver dårlig sti:

{% code overflow="wrap" %}

```bash
$ bin/docker-compose exec sharelatex /bin/bash -c "cd /overleaf/services/web && /sbin/setuser www-data node scripts/fix_malformed_filetree.mjs --logs=/tmp/malformed-file-trees.json"
```

{% endcode %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://ayakaleaf-pro.ayaka.space/on-premises/da/support/support-guides/v5.5.7-migration-binary-files-migration.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
