-
Notifications
You must be signed in to change notification settings - Fork 373
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
✨ New tutorial - "Object Storage Based Filesystem with s3fs" (#1007)
* added s3fs tutorial * added License * Spelling and formatting updates --------- Co-authored-by: svenja.michal <[email protected]>
- Loading branch information
Showing
2 changed files
with
526 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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]] | ||
--> |
Oops, something went wrong.