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

# (v5.5.7-migrering) 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 til halvparten. En nettbasert migrering er inkludert i versjon `5.5.7` , slik at nedetiden blir minimal som en del av oppgraderingen.

Siden Server Pro `4.x`, lagres binærfiler to ganger: i aktiv fil-lagring i "filestore" og i systemet for full prosjekthistorikk. Fremover vil det bare lagres én kopi av hver fil i systemet for full prosjekthistorikk.

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

Når du lagrer data 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`): Gi filestore-brukeren lesetilgang til historikk-bøtta for blobs `OVERLEAF_HISTORY_PROJECT_BLOBS_BUCKET` . Filestore-tjenesten vil fremover levere lesing fra kompilatortjenesten.

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

{% hint style="success" %}
Den standard Server Pro-lisensen 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 at du vil 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 spurt, ikke **ikke** bekreft ledeteksten **Oppgrader** bilde? — rediger i stedet manuelt **config/version** filen og sett verdien til `5.5.7`.

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

{% step %}

#### Estimer antallet berørte prosjekter

{% code overflow="wrap" %}

```bash
# For brukere av 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"

# Brukere av gammelt 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" %}

```
Nåværende status:
- Totalt antall prosjekter: 10
- Totalt antall slettede prosjekter: 5
Tar et utvalg av 1000 prosjekter for å anslå fremdriften...
Statistikk for utvalgte prosjekter:
- Utvalgte prosjekter: 9 (90 % av alle prosjekter)
- Utvalgte prosjekter med alle hasher til stede: 5
- Andel prosjekter som trenger etterfylling av hasher: 44 % (estimert)
- Utvalgte prosjekter har 11 filer som må sjekkes mot systemet for full prosjekthistorikk.
- Utvalgte prosjekter har 3 filer som må lastes opp til systemet for full prosjekthistorikk (anslår 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
- Andel slettede prosjekter som trenger etterfylling av hasher: 25 % (estimert)
- Utvalgte slettede prosjekter har 2 filer som må sjekkes mot systemet for full prosjekthistorikk.
- Utvalgte slettede prosjekter har 1 fil som må lastes opp til systemet for full prosjekthistorikk (anslår 50 % av alle filer).
```

{% endcode %}
{% endstep %}

{% step %}

#### Tøm køene for prosjekthistorikk

{% code overflow="wrap" %}

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

# Brukere av gammelt 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`.

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

{% step %}

#### Bruk konfigurasjonsendringen og start instansen

Verktøysett: `bin/up -d`

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

{% step %}

#### Bekreft 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
# For brukere av 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"

# Brukere av gammelt 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 [beholder 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 loggfilen kan skrives.
{% endhint %}

Resultatet skal se slik ut:

```bash
Sett 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...
Lastet globale blobs: 0
Behandler prosjekter som ikke er slettet...
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 lykkes, vil du få en returkode på `0`og de siste linjene som indikerer at det ikke var noen feil:

```bash
Ferdig.
```

Loggfilen vil se slik ut (bruk stien 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`

Gammelt 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 det oppstår problemer senere.

{% code overflow="wrap" %}

```bash
# Brukere av verktøysett:
$ 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 gammelt 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`.

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

{% step %}

#### Bruk konfigurasjonsendringen og start instansen

Verktøysett: `bin/up -d`

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

{% step %}

#### Bekreft 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å **Admin** -knappen og velge **Administrer nettsted**
* Klikk på **Åpne/lukke editor** fanen
* Klikk på **Lukk editor** knappen
* Klikk på **Koble fra alle brukere** knappen

Når dette er gjort, vil eventuelle innloggede brukere bli omdirigert til vedlikeholdssiden, og nye brukere som besøker innloggingssiden vil se vedlikeholdssiden og **vil ikke** kunne logge inn.

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

#### Online migrering

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

* Migreringsprosessen er IO-intensiv, og du bør overvåke ressursbruken mens skriptet kjører.
* Med høy behandlingskonkurrens kan hendelsessløyfen i `filestore` tjenesten oppleve en del blokkering, noe som kan gi 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 når det er mindre trafikk (f.eks. om natten).

Vår anbefaling er å stenge siden 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 antall 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 vanligvis bare tilbyr support til Server Pro-kunder, vil vi, gitt denne migreringens natur, også gjøre vårt beste for å støtte CE-kunder som opplever problemer spesifikt knyttet til 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 ikke er null), send 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:

Emne: Problem med migrering av binærfiler

Brødtekst:

* Instansetype: 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)
* Varigheten av migreringen:
* `bin/doctor` utdata (ved bruk av toolkit)
* Toolkit-versjon: `$ git rev-parse HEAD` (ved bruk av Toolkit)

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 i loggfilene før du legger dem ved.

#### Manglende filer

Eldre versjoner av Server Pro/CE opprettet fil-treoppføringer før brukeropplastinger var fullført, noe som kunne føre til at filer så ut til å mangle når en opplasting feilet. Du kan finne noen få av disse tilfellene rapportert som feil når alle fil-trærne behandles.

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

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

#### Finne ødelagte filtrær

Migreringen kan feile for prosjekter som har et feilformet filtre (for eksempel der filnavnene er tomme). Du kan finne en liste over disse problemene ved hjelp av `find_malformed_filetrees` skriptet som sjekker alle prosjekter 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 ugyldige 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/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.
