Skip to content

Commit

Permalink
✨ New tutorial - "Object Storage Based Filesystem with s3fs" (#1007)
Browse files Browse the repository at this point in the history
* added s3fs tutorial
* added License
* Spelling and formatting updates

---------

Co-authored-by: svenja.michal <[email protected]>
  • Loading branch information
DasCanard and svenja11 authored Dec 12, 2024
1 parent 7a0a506 commit c9d608c
Show file tree
Hide file tree
Showing 2 changed files with 526 additions and 0 deletions.
263 changes: 263 additions & 0 deletions tutorials/object-storage-based-filesystem/01.de.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,263 @@
---
SPDX-License-Identifier: MIT
path: "/tutorials/object-storage-based-filesystem/de"
slug: "object-storage-based-filesystem"
date: "2024-12-12"
title: "Objektspeicher als Dateisystem mit s3fs"
short_description: "Lerne, wie man Object Storage als lokales Dateisystem mit s3fs einbindet. Inklusive Installation, Konfiguration und Leistungsoptimierung."
tags: ["Development", "Object Storage", "Filesystem". "s3fs"]
author: "Richy"
author_link: "https://github.com/DasCanard"
author_img: "https://avatars.githubusercontent.com/u/17070204"
author_description: ""
language: "de"
available_languages: ["de", "en"]
header_img: "header-5"
cta: "cloud"
---

## Einführung

In diesem Tutorial wird erklärt, wie man einen S3 Bucket mittels [s3fs](https://github.com/s3fs-fuse/s3fs-fuse) in das lokale Dateisystem eines Servers einhängt.

> **Empfehlung**: Diese Anleitung verwendet Hetzner Object Storage, der S3-kompatiblen Speicher mit ausgezeichnetem Preis-Leistungs-Verhältnis und europäischen Rechenzentren bietet. Weitere Informationen: [Hetzner Object Storage Dokumentation](https://docs.hetzner.com/storage/object-storage/overview/)
## Schritt 1 - Installation

* Für Ubuntu/Debian:
```bash
sudo apt-get update
sudo apt-get install s3fs
```

* Für CentOS/RHEL:
```bash
sudo yum install s3fs-fuse
```

* Aus dem Quellcode (falls nötig):
```bash
sudo apt-get install automake autotools-dev g++ git libcurl4-gnutls-dev libfuse-dev libssl-dev libxml2-dev make pkg-config
git clone https://github.com/s3fs-fuse/s3fs-fuse.git
cd s3fs-fuse
./autogen.sh
./configure
make
sudo make install
```

## Schritt 2 - Zugangsdaten konfigurieren und Mountpunkt erstellen
> Für Hetzner Object Storage, erstelle die Zugangsdaten in der Hetzner Cloud Console
1. Zugangsdatei erstellen:
```bash
echo "ACCESS_KEY_ID:SECRET_ACCESS_KEY" | sudo tee /root/.passwd-s3fs > /dev/null
```

2. Korrekte Berechtigungen setzen:
```bash
sudo chmod 600 /root/.passwd-s3fs
```

3. Mountpunkt erstellen
```bash
sudo mkdir /mnt/s3storage
```

## Schritt 3 - Mount-Optionen

Ersetze in den Mount-Befehlen die Platzhalter `<bucket_name>` und `https://nbg1.your-objectstorage.com/` mit dem tatsächlichen Bucket-Namen und Endpunkt.

Wenn du Hetzner Object Storage verwendest, muss die URL entsprechend der Region gewählt werden, in welcher der Bucket erstellt wurde. Die Region kannst du in der Hetzner Cloud Console unter "Object Storage" einsehen. Im [Object Storage Überblick](https://docs.hetzner.com/de/storage/object-storage/overview#verfugbare-endpunkte) findest du eine Liste verfügbarer Endpunkte. Beispiel: Wenn dein Bucket in Nürnberg erstellt wurde, verwende in den Mount-Befehlen und der fstab die URL `https://nbg1.your-objectstorage.com`. Die Region kann nach der Bucket-Erstellung nicht mehr geändert werden.

> **Hinweis**: Eine falsche URL führt zu Verbindungsfehlern.
* Manueller Mount-Befehl
```bash
sudo s3fs <bucket_name> /mnt/s3storage \
-o url=https://nbg1.your-objectstorage.com/ \
-o allow_other \
-o use_path_request_style \
-o use_cache=/tmp/s3fs \
-o multipart_size=100 \
-o parallel_count=8 \
-o big_writes \
-o kernel_cache \
-o umask=0022 \
-o enable_noobj_cache \
-o retries=5 \
-o ensure_diskfree=20000 \
-o connect_timeout=180 \
-o max_dirty_data=1024 \
-o max_stat_cache_size=100000 \
-o passwd_file=/root/.passwd-s3fs
```

* Automatischer Mount über fstab

Füge diese Zeile zu `/etc/fstab` hinzu:
```bash
s3fs#<bucket_name> /mnt/s3storage fuse _netdev,allow_other,use_path_request_style,url=https://nbg1.your-objectstorage.com/,use_cache=/tmp/s3fs,multipart_size=100,parallel_count=8,big_writes,kernel_cache,umask=0022,enable_noobj_cache,retries=5,ensure_diskfree=20000,connect_timeout=180,max_dirty_data=1024,max_stat_cache_size=100000,passwd_file=/root/.passwd-s3fs 0 0
```

Erklärung der Konfigurationsparameter:

Netzwerkeinstellungen

| Flag | Beschreibung |
| ----------- | ------------ |
| <kbd>url=</kbd> | Object Storage Endpunkt-URL |
| <kbd>connect_timeout=180</kbd> | Verbindungs-Timeout in Sekunden |
| <kbd>retries=5</kbd> | Anzahl der Wiederholungsversuche |
| <kbd>use_path_request_style</kbd> | Verwendet Pfad-Stil S3-URLs |

Cache-Konfiguration

| Flag | Beschreibung |
| ----------- | ------------ |
| <kbd>use_cache=/tmp/s3fs</kbd> | Lokales Cache-Verzeichnis |
| <kbd>max_stat_cache_size=100000</kbd> | Maximale Anzahl der Stat-Cache-Einträge |
| <kbd>enable_noobj_cache</kbd> | Speichert nicht existierende Objekte im Cache |
| <kbd>max_dirty_data=1024</kbd> | Maximale Menge an unsauberen Cache-Daten (MB) |

Leistungsoptionen

| Flag | Beschreibung |
| ----------- | ------------ |
| <kbd>multipart_size=100</kbd> | Größe für Multipart-Uploads (MB) |
| <kbd>parallel_count=8</kbd> | Anzahl paralleler Verbindungen |
| <kbd>big_writes</kbd> | Aktiviert größere Schreiboperationen |
| <kbd>kernel_cache</kbd> | Aktiviert Kernel-Caching |
| <kbd>ensure_diskfree=20000</kbd> | Minimaler freier Speicherplatz (MB) |

Berechtigungseinstellungen

| Flag | Beschreibung |
| ----------- | ------------ |
| <kbd>allow_other</kbd> | Erlaubt Zugriff durch andere Benutzer |
| <kbd>umask=0022</kbd> | Standard-Unix-Berechtigungen |

## Schritt 4 - Test und Überprüfung

* Mount-Befehl testen
```bash
# Manueller Mount
sudo s3fs bucketname /mnt/s3storage [Optionen wie oben]

# Mount überprüfen
df -h
mount | grep s3fs
```

* fstab-Eintrag testen
```bash
# fstab-Eintrag ohne Neustart testen
sudo mount -a

# Mount überprüfen
df -h
mount | grep s3fs
```

## Schritt 5 - Fehlerbehebung

* Debug-Modus
```bash
# Diese Optionen für Debugging hinzufügen
-o dbglevel=info -f -o curldbg
```

* Häufige Probleme

Berechtigungsprobleme:
```bash
# Dateiberechtigungen prüfen
sudo ls -la /root/.passwd-s3fs
ls -la /mnt/s3storage
```

Cache-Probleme:
```bash
# Cache leeren
sudo rm -rf /tmp/s3fs/*
```

## Schritt 6 - Wartung

* Aushängen
```bash
# Manuelles Aushängen
sudo umount /mnt/s3storage

# Erzwungenes Aushängen falls nötig
sudo umount -f /mnt/s3storage
```

* Cache-Verwaltung
```bash
# Cache leeren
sudo rm -rf /tmp/s3fs/*

# Neues Cache-Verzeichnis erstellen
sudo mkdir -p /tmp/s3fs
sudo chmod 777 /tmp/s3fs
```

## Schritt 7 - Sicherheitsempfehlungen

1. Immer HTTPS-Endpunkte verwenden
2. Zugangsdatei sichern:
```bash
sudo chmod 600 /root/.passwd-s3fs
```
3. Regelmäßige Berechtigungsprüfungen
4. Zugriffsprotokolle überwachen
5. Backup-Strategie implementieren

## Schritt 8 - Leistungsoptimierung für Object Storage

Für optimale Leistung mit Object Storage:

- Wähle den nächstgelegenen Endpunkt zu deinem Server
- Verwende eine angemessene `multipart_size` (100MB ist für die meisten Fälle gut)
- Passe `parallel_count` basierend auf deiner Bandbreite an (8-16 wird empfohlen)
- Aktiviere `kernel_cache` für bessere Leseleistung
- Nutze `big_writes` für verbesserte Schreibleistung
- Erwäge die Nutzung eines Servern in der gleichen Region wie dein Object Storage

Denken daran, nach allen Konfigurationsänderungen gründlich zu testen.

## Ergebnis

In `/mnt/s3storage` solltest du nun die Inhalte deines S3-Buckets sehen. Über diesen Pfad kannst du jetzt Daten in deinem Bucket hinzufügen oder löschen, genau wie du es in jedem anderen Ordner auf dem Server würdest.

##### License: MIT

<!--
Contributor's Certificate of Origin
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I have
the right to submit it under the license indicated in the file; or
(b) The contribution is based upon previous work that, to the best of my
knowledge, is covered under an appropriate license and I have the
right under that license to submit that work with modifications,
whether created in whole or in part by me, under the same license
(unless I am permitted to submit under a different license), as
indicated in the file; or
(c) The contribution was provided directly to me by some other person
who certified (a), (b) or (c) and I have not modified it.
(d) I understand and agree that this project and the contribution are
public and that a record of the contribution (including all personal
information I submit with it, including my sign-off) is maintained
indefinitely and may be redistributed consistent with this project
or the license(s) involved.
Signed-off-by: DasCanard [[email protected]]
-->
Loading

0 comments on commit c9d608c

Please sign in to comment.