> For the complete documentation index, see [llms.txt](https://overleaf-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://overleaf-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

## Migration af binære filer

Den kommende store version `6.0` udgivelse af Server Pro og Community Edition vil halvere lagerforbruget for binære filer. En online-migration 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 projekt-historiksystem. Fremover vil der blive gemt én kopi af hver fil i det fulde projekt-historiksystem.

Migrationen til det konsoliderede lagersystem består af to dele: Et nyt flag til at styre migreringsfasen og et script, der behandler alle aktive og blødth 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` læses og skrives filer 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-bucketen for blobs `OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET` . Filestore-tjenesten vil fremover håndtere læsninger fra compiler-tjenesten.

{% hint style="warning" %}
Det anbefales kraftigt at udføre migrationen af binære filer først i et ikke-produktions-/sandbox-miljø.
{% endhint %}

{% hint style="success" %}
Den standard Server Pro-licens giver dig mulighed for at køre applikationen i et produktionsmiljø samt et i et ikke-produktions-/sandbox-miljø; det anbefales kraftigt, at du opretter et ikke-produktionsmiljø til testning.
{% 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

**Toolkit:** Brug `$ bin/upgrade` script til at opgradere **toolkittet** til den nyeste version. Når du bliver spurgt, 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
# Brugere af Overleaf Toolkit:
$ 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" %}

```
Aktuel status:
- Samlet antal projekter: 10
- Samlet antal slettede projekter: 5
Sampler 1000 projekter for at estimere fremdrift...
Samplede statistikker for projekter:
- Samplede projekter: 9 (90 % af alle projekter)
- Samplede projekter med alle hashes til stede: 5
- Andel af projekter, der har brug for backfilling af hashes: 44 % (estimeret)
- Samplede projekter har 11 filer, der skal kontrolleres mod det fulde projekt-historiksystem.
- Samplede projekter har 3 filer, der skal uploades til det fulde projekt-historiksystem (estimerer 27 % af alle filer).
Samplede statistikker for slettede projekter:
- Samplede slettede projekter: 4 (80 % af alle slettede projekter)
- Samplede slettede projekter med alle hashes til stede: 3
- Andel af slettede projekter, der har brug for backfilling af hashes: 25 % (estimeret)
- Samplede slettede projekter har 2 filer, der skal kontrolleres mod det fulde projekt-historiksystem.
- Samplede slettede projekter har 1 filer, der skal uploades til det fulde projekt-historiksystem (estimerer 50 % af alle filer).
```

{% endcode %}
{% endstep %}

{% step %}

#### Tøm køerne for projekt-historik

{% code overflow="wrap" %}

```bash
# Brugere af Overleaf Toolkit:
$ 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`).

```
fundne projekter {"project_ids":0,"limit":100000,"ts":"2025-09-01T10:35:33.353Z"}
i alt {"succeededProjects":0,"failedProjects":0}
```

{% hint style="danger" %}
Hvis "failedProjects" ikke er nul, så kontakt support og fortsæt ikke med migrationen af binære filer.
{% endhint %}
{% endstep %}

{% step %}

#### Før migreringsfasen frem til 1

Toolkit: 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 i `sharelatex` tjeneste.
{% endstep %}

{% step %}

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

Toolkit: `bin/up -d`

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

{% step %}

#### Verificé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 migrationsscriptet

{% code overflow="wrap" %}

```bash
# Brugere af Overleaf Toolkit:
$ 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, at ejer af logs-mappen er sat til `www-data` brugeren (uid=33), så den genererede 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":"Indlæser backend","time":"2025-07-25T15:00:58.166Z","v":0}
Skriver logs til /var/log/overleaf/file-migration-2025-07-25T15_00_58_199Z.log
Starter backup af projektfiler...
Globale blobs indlæst: 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 er vellykket, får du en exit-kode på `0`, og de sidste linjer angiver ingen fejl:

```bash
Færdig.
```

Logfilen vil se sådan ud (brug stien som udskrevet af scriptet):

{% 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":"fuldførte faktisk batchen","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":"statistikker for fil-migration","v":0}
```

{% endcode %}
{% endstep %}

{% step %}

#### Stop instansen

Toolkit: `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 i et stykke tid, hvis der opstår problemer senere.

{% code overflow="wrap" %}

```bash
# Brugere af Toolkit:
$ 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 den 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 %}

#### Før migreringsfasen frem til 2

Toolkit: 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 i `sharelatex` tjeneste.
{% endstep %}

{% step %}

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

Toolkit: `bin/up -d`

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

{% step %}

#### Verificé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 migration af binære filer kører, skal du følge disse trin:

* Log ind på din Overleaf-instans med en administratorkonto
* Klik på **Administrator** knap og vælge **Administrer websted**
* 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 alle brugere, der er logget ind, blive omdirigeret til vedligeholdelsessiden, og alle 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 genåbne sitet skal du blot genstarte instansen.

#### Online-migrering

Det er muligt at køre migrationsscripts, 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 en høj behandlingskonkurrence kan hændelsesløkken 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 migrationen i timer med mindre aktivitet (f.eks. om natten).

Vores anbefaling er at lukke sitet og køre migrationen offline i et vedligeholdelsesvindue, når dit projektantal er under 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 baseret på din konkrete situation.

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

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

### Fejlfinding

Vi vil tilføje fejlfindingråd her. Bemærk venligst, at selvom vi normalt kun yder support til Server Pro-kunder, vil vi på grund af denne migrations karakter også gøre vores bedste for at støtte CE-kunder, der oplever problemer specifikt relateret til migrationen af binære filer.

Hvis scriptet til migration af binære filer fejler (dvs. afslutter med en fejl eller udskriver et ikke-nul antal mislykkede projekter), så send venligst følgende detaljer 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 oplysninger om:

Emne: Problem med migration af binære filer

Brødtekst:

* Instanstype: CE eller Server Pro (slet det, der ikke passer)
* Installationstype: Overleaf Toolkit eller `docker-compose.yml` eller andet (slet det, der ikke passer)
* Version: 5.5.x (toolkit: `$ cat config/version`)
* Output fra migrationsscriptet (som bør befinde sig i containeren under `/var/log/overleaf`)
* Rapport: (kør migreringsscriptet med `--report`)
* Behandlede projekter: (ifølge den seneste kørsel af scriptet)
* Migreringens varighed:
* `bin/doctor` output (ved brug af toolkit)
* Toolkit-version: `$ git rev-parse HEAD` (ved brug af 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 eksportere 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 eventuelle følsomme oplysninger fra logfilerne, før du vedhæfter dem.

#### Manglende filer

Ældre versioner af Server Pro/CE oprettede file-tree-entries, før brugeruploads var færdige, hvilket kunne få filer til at fremstå som manglende, når en upload mislykkedes. Du kan finde nogle af disse tilfælde rapporteret som fejl, når alle fil-træerne behandles.

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

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

#### Find ødelagte filtæer

Migreringen kan fejle for projekter, der har et fejlformet filtæ (for eksempel hvor filnavne 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://overleaf-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.
