> 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/on-premises-no/stotte/support-guides/v5.5.7-migration-binary-files-migration.md).

# (Migrering fra v5.5.7) Migrering av binærfiler

## Migrering av binærfiler

Den kommende hovedversjonen `6.0` utgivelsen av Server Pro og Community Edition vil redusere lagringsbruken for binærfiler med halvparten. En online migrering er inkludert i versjon `5.5.7` , noe som gir minimal nedetid som en del av oppgraderingen.

Siden Server Pro `4.x`, lagres binærfiler to ganger: i lagringen for aktive filer i "filestore" og i systemet for full prosjektlogg. Fremover vil én kopi av hver fil bli lagret i systemet for full prosjektlogg.

Migreringen til det konsoliderte lagringssystemet består av to deler: Et nytt flagg for å styre migreringsfasen og et skript som behandler alle aktive og mykt slettede prosjekter.

Faser:

* `OVERLEAF_FILESTORE_MIGRATION_LEVEL=0` (standard), filer leses fra og skrives til filestore. Filer skrives asynkront til historikken.
* `OVERLEAF_FILESTORE_MIGRATION_LEVEL=1` , filer leses fra historikken med tilbakefall 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 leses og skrives bare til historikken. Nedgradering til `OVERLEAF_FILESTORE_MIGRATION_LEVEL=1` er ikke mulig, med mindre den ble utført "offline".

Når data lagres i [S3](https://docs.overleaf.com/on-premises/configuration/overleaf-toolkit/s3) og bruker separate tjenestekontoer for filestore (`OVERLEAF_FILESTORE_S3_ACCESS_KEY_ID`) og historikk (`OVERLEAF_HISTORY_S3_ACCESS_KEY_ID`): Vennligst gi filestore-brukeren lesetilgang til historikkbøtten for blobs `OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET` . Filestore-tjenesten vil fremover håndtere lesing fra kompilator-tjenesten.

{% hint style="warning" %}
Det anbefales på det sterkeste å utføre migreringen av binærfiler i et ikke-produksjons-/sandkassemiljø først.
{% endhint %}

{% hint style="success" %}
Standardlisensen for Server Pro lar deg kjøre applikasjonen i et produksjonsmiljø samt ett i et ikke-produksjons-/sandkassemiljø; det anbefales på det sterkeste at du setter opp et ikke-produksjonsmiljø for testing.
{% endhint %}

{% hint style="info" %}
Hvis du oppgraderer til Server Pro/CE-versjon `6.0` og senere bestemmer deg for å nedgradere til en tidligere versjon, bør du gjenopprette fra en fullstendig systemsikkerhetskopi.
{% endhint %}

### Migreringsprosedyre

{% stepper %}
{% step %}

#### Opprett en sikkerhetskopi

Opprett en fullstendig [sikkerhetskopi](https://docs.overleaf.com/on-premises/maintenance/data-and-backups#performing-a-consistent-backup) av instansen din med et konsistent øyeblikksbilde av **mongo**, **redis** og **sharelatex** katalogene.
{% endstep %}

{% step %}

#### Oppdater

**Verktøysett:** Bruk `$ bin/upgrade` skript for å oppgradere **verktøysettet** til den nyeste versjonen. Når du blir bedt om det, ikke **ikke** bekreft forespørselen **Oppgrader** image? — rediger i stedet manuelt **config/version** filen og sett verdien til `5.5.7`.

**Gammel docker-compose.yml:** Oppdater versjonen av `sharelatex` tjenesten til `5.5.7`.
{% endstep %}

{% step %}

#### Estimer antall berørte prosjekter

{% code overflow="wrap" %}

```bash
# Overleaf Toolkit-brukere:
$ 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"

# Brukere av gammel 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å utdata:

{% code fullWidth="false" %}

```
Gjeldende status:
- Totalt antall prosjekter: 10
- Totalt antall slettede prosjekter: 5
Tar et utvalg på 1000 prosjekter for å estimere fremdriften...
Statistikk for utvalgte prosjekter:
- Utvalgte prosjekter: 9 (90 % av alle prosjekter)
- Utvalgte prosjekter med alle hasher til stede: 5
- Prosentandel prosjekter som trenger etterfylling av hasher: 44 % (estimert)
- De utvalgte prosjektene har 11 filer som må kontrolleres mot systemet for full prosjektlogg.
- De utvalgte prosjektene har 3 filer som må lastes opp til systemet for full prosjektlogg (estimert 27 % av alle filer).
Statistikk for utvalgte slettede prosjekter:
- Utvalgte slettede prosjekter: 4 (80 % av alle slettede prosjekter)
- Utvalgte slettede prosjekter med alle hasher til stede: 3
- Prosentandel slettede prosjekter som trenger etterfylling av hasher: 25 % (estimert)
- De utvalgte slettede prosjektene har 2 filer som må kontrolleres mot systemet for full prosjektlogg.
- De utvalgte slettede prosjektene har 1 fil som må lastes opp til systemet for full prosjektlogg (estimert 50 % av alle filer).
```

{% endcode %}
{% endstep %}

{% step %}

#### Tøm køene for prosjektlogg

{% code overflow="wrap" %}

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

# Brukere av gammel docker-compose.yml:
$ docker compose exec sharelatex /overleaf/bin/flush-history-queues
```

{% endcode %}

Gjenta tømmingen til alle prosjekter er tømt (`"project_ids":0`).

```
fant prosjekter {"project_ids":0,"limit":100000,"ts":"2025-09-01T10:35:33.353Z"}
totalt {"succeededProjects":0,"failedProjects":0}
```

{% hint style="danger" %}
Hvis "failedProjects" ikke er null, ta kontakt med support og ikke fortsett med migreringen av binærfiler.
{% endhint %}
{% endstep %}

{% step %}

#### Sett migreringsfasen til 1

Verktøysett: Sett `OVERLEAF_FILESTORE_MIGRATION_LEVEL=1` i `config/variables.env`.

Gammel docker-compose.yml: Sett `OVERLEAF_FILESTORE_MIGRATION_LEVEL: '1'` i `miljø` delen av `sharelatex` tjenesten.
{% endstep %}

{% step %}

#### Bruk konfigurasjonsendringen og start instansen

Verktøysett: `bin/up -d`

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

{% step %}

#### Kontroller tilgang til binærfiler

Åpne et prosjekt i Overleaf-redigereren i nettleseren og velg en binærfil, for eksempel et bilde.
{% endstep %}

{% step %}

#### Kjør migreringsskriptet

{% code overflow="wrap" %}

```bash
# Overleaf Toolkit-brukere:
$ 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"

# Brukere av gammel 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 [lagrer logg](https://docs.overleaf.com/on-premises/configuration/overleaf-toolkit/logging#persisting-logs) filer utenfor **sharelatex** containeren, må du sørge for at eieren av loggkatalogen er satt til `www-data` brukeren (uid=33) slik at den genererte loggfila kan skrives.
{% endhint %}

Utdataene skal se slik ut:

```bash
Set UV_THREADPOOL_SIZE=16
{"name":"default","hostname":"c25e9faaeb53","pid":971,"level":30,"backend":"fs","msg":"Laster 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 sikkerhetskopiering av prosjektfiler...
Globale blob-er lastet: 0
Behandler ikke-slettede prosjekter...
Behandlet 1 prosjekt, medgått tid 0 s
Ferdig med å oppdatere aktive prosjekter
Behandler slettede prosjekter...
Samlingen deletedProjects ser ut til å være tom.

Ferdig med å oppdatere slettede prosjekter
Ferdig.

```

Hvis migreringen er vellykket, får du en avslutningskode på `0`, og de siste linjene indikerer ingen feil:

```bash
Ferdig.
```

Loggfila vil se slik ut (bruk banen som skriptet skriver ut):

{% 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":"fullfø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":"statistikk for filmigrering","v":0}
```

{% endcode %}
{% endstep %}

{% step %}

#### Stopp instansen

Verktøysett: `bin/stop sharelatex`

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

{% step %}

#### Gjør gamle filer utilgjengelige for applikasjonen

Du kan nå flytte de gamle filene til sekundærlagring. Vi anbefaler å beholde filene en stund i tilfelle problemer oppstår senere.

{% code overflow="wrap" %}

```bash
# Brukere av verktøysettet:
$ bin/docker-compose run --rm --entrypoint mv sharelatex --no-clobber --verbose /var/lib/overleaf/data/user_files /var/lib/overleaf/data/old_user_files

# Brukere av gammel docker-compose.yml:
# Vi antar at du bruker 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 bruker selektive bind-mounts, kan du ganske enkelt fjerne bind-mounten for /var/lib/overleaf/data/user_files inne i containeren.
```

{% endcode %}
{% endstep %}

{% step %}

#### Sett migreringsfasen til 2

Verktøysett: Sett `OVERLEAF_FILESTORE_MIGRATION_LEVEL=2` i `config/variables.env`.

Gammel docker-compose.yml: Sett `OVERLEAF_FILESTORE_MIGRATION_LEVEL: '2'` i `miljø` delen av `sharelatex` tjenesten.
{% endstep %}

{% step %}

#### Bruk konfigurasjonsendringen og start instansen

Verktøysett: `bin/up -d`

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

{% step %}

#### Kontroller tilgang til binærfiler

Åpne et prosjekt i Overleaf-redigereren i nettleseren og velg en binærfil, for eksempel et bilde.
{% endstep %}
{% endstepper %}

#### frakoblet migrering

Hvis du vil forhindre at brukere kan logge inn mens skriptet for migrering av binærfiler kjører, følger du disse trinnene:

* Logg inn på Overleaf-instansen din med en administratorkonto
* Klikk på **Administrator** knappen og velg **Administrer nettstedet**
* Klikk på **Åpne/lukk redigeringsprogrammet** fanen
* Klikk på **Lukk redigeringsprogrammet** knappen
* Klikk på **Koble fra alle brukere** knappen

Når dette er gjort, vil alle påloggede brukere bli videresendt til vedlikeholdssiden, og nye brukere som besøker innloggingssiden vil se vedlikeholdssiden og **ikke** kunne logge inn.

Du må gjenta disse trinnene når du starter instansen på nytt. For å åpne nettstedet igjen, starter du bare instansen på nytt.

#### Online migrering

Det er mulig å kjøre migreringsskriptene mens applikasjonen fortsatt kjører. Det er noen hensyn som må tas:

* Migreringsprosessen er IO-intensiv, og du bør overvåke ressursbruken mens skriptet kjører.
* Ved høy behandlingskonkurranse kan event-løkken i `filestore` tjenesten oppleve noe blokkering, noe som vil føre til en dårligere brukeropplevelse. Vi anbefaler å starte med standardverdiene for `--concurrency=10` og `--concurrent-batches=1` .
* Du kan stoppe skriptet når som helst. Hvis du starter det igjen, vil det validere de tidligere prosjektene og hoppe over filer som allerede er behandlet. Dette er nyttig hvis du foretrekker å kjøre migreringen i mindre travle timer (f.eks. om natten).

Vår anbefaling er å lukke nettstedet og kjøre migreringen offline i et vedlikeholdsvindu når antallet prosjekter er under 1000 prosjekter (se utdata fra migreringsskriptet når det kjøres med `--report`). Hvis antallet prosjekter er stort, kan du kjøre skriptet og overvåke fremdriften, og deretter bestemme om du vil fortsette å kjøre det online eller offline basert på din spesifikke situasjon.

#### Rydd opp i eldre binærfildata

Når du er ferdig med migreringen og har bekreftet at prosjektene fortsatt har tilgang til alle filene sine, kan du fjerne den gamle fillagringen i `/var/lib/overleaf/data/user_files`. Vi anbefaler på det sterkeste å beholde disse filene en stund - du kan gjøre dem utilgjengelige for applikasjonen ved først å gi nytt navn til mappen.

### Feilsøking

Vi vil legge til feilsøkingsråd her. Vær oppmerksom på at selv om vi normalt bare tilbyr støtte til Server Pro-kunder, vil vi, gitt arten av denne migreringen, også gjøre vårt beste for å støtte CE-kunder som opplever problemer som er spesifikke for migreringen av binærfiler.

Hvis skriptet for migrering av binærfiler mislykkes (dvs. avsluttes med en feil eller skriver ut et antall mislykkede prosjekter som er større enn null), kan du sende følgende detaljer til supportteamet vårt på e-post [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 detaljer om:

Emne: Problem med migrering av binærfiler

Brødtekst:

* Instanstype: CE eller Server Pro (slett det som ikke passer)
* Installasjonstype: Overleaf toolkit eller `docker-compose.yml` eller annet (slett det som ikke passer)
* Versjon: 5.5.x (verktøysett: `$ cat config/version`)
* Utdata fra migreringsskriptet (som skal ligge i containeren under `/var/log/overleaf`)
* Rapport: (kjør migreringsskriptet med `--report`)
* Behandlede prosjekter: (i henhold til den siste kjøringen av skriptet)
* Varighet for migreringen:
* `bin/doctor` utdata (når toolkit brukes)
* Toolkit-versjon: `$ git rev-parse HEAD` (når toolkit brukes)

Vurder å legge ved loggfilene for `filestore` tjenesten til e-posten. Du finner den på `/var/log/overleaf/filestore.log` inne i `sharelatex` containeren og eksporter dem slik:

```bash
$ docker cp sharelatex:/var/log/overleaf/filestore.log .
# erstatt <timestamp> med tidsstempelet som skriptet skriver ut
$ docker cp sharelatex:/var/log/overleaf/file-migration-<timestamp>.log .
```

Vennligst sladd all sensitiv informasjon fra loggfilene før du legger dem ved.

#### Mangler filer

Eldre versjoner av Server Pro/CE opprettet oppføringer i filtretreet før brukeropplastinger var fullført, noe som kunne føre til at filer så ut til å mangle når en opplasting mislyktes. Du kan finne noen få slike tilfeller rapportert som feil når alle filtretrærne behandles.

Hvis antallet manglende filer er lavt, bør du vurdere å gjennomgå disse tilfellene manuelt og slette dem fra redigereren i nettleseren.

Hvis antallet manglende filer er høyt, bør du vurdere å kontakte support, se e-postmalen ovenfor.

#### Finne ødelagte filtrær

Migreringen kan mislykkes for prosjekter som har et feilformatert filtre (for eksempel der filnavnene er tomme). Du kan finne en liste over disse problemene ved å bruke `find_malformed_filetrees` skriptet som sjekker alle prosjektene 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 å rette de ugyldige stiene, bruk `fix_malformed_filetree` skriptet, og kjør kommandoen én gang for hver dårlige 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/on-premises-no/stotte/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.
