ZeroFS؛ باکت S3 رو مثل فایلسیستم و دیسک بلاک بالا بیار
خلاصهٔ کاملتر
ZeroFS یه فایلسیستم لاگساختاره که هدفش اینه انبار ابجکتِ سازگار با S3 رو مثل یه دیسک محلی در دسترس بذاره. کاری که میکنه اینه که یه باکت S3 رو همزمان به سه شکل عرضه میکنه: فایلسیستم POSIX روی NFS و 9P، و دیسک بلاک خام روی NBD. جالب اینه که هر سه سرور تو یه پروسهٔ فضای کاربر و روی یه باکت مشترک اجرا میشن.
مکانیزم نوشتنش اینطوریه که نوشتهها بهشکل سگمنتهای تغییرناپذیر بیرون میرن که قبل از آپلود فشرده و رمز میشن، و خوندنهای گرم هم از کش محلی سرو میشن. برای اتصال هم لازم نیست کلاینت خاصی نصب کنی؛ macOS، لینوکس، ویندوز و BSDها با همون کلاینت NFS که خودشون دارن مونتش میکنن، هرچند برای جایی که دوام fsync مهمه، مونت 9P پیشنهاد میشه.
یکی از نمونههای چشمگیرش توزیع جغرافیاییه: میتونی سه نمونهٔ ZeroFS رو راه بندازی که هر کدوم باکت یه ریجن رو بهشکل دیسک بلاک نشون بدن، بعد با ZFS یه پول آینهای (mirror) روی هر سه بسازی. برای ZFS اینها فقط دیسکهای معمولیان. اگه یه ریجن از دسترس خارج شه، پول به حالت degraded میره ولی آنلاین میمونه و وقتی ریجن برگشت، ZFS دوباره اون عضو رو همگام میکنه.
موتور ذخیرهسازیش چند تیکهٔ مشخص داره: دادهٔ فایل به اکستنتهای ۳۲ کیلوبایتی شکسته و تو ابجکتهای سگمنتیِ حداکثر ۲۵۶ مگابایتی بستهبندی میشه. رمزنگاری با XChaCha20-Poly1305 روی هر اکستنت انجام میشه و کلید داده با کلیدی که از پسورد و Argon2id مشتق شده، wrap میشه. فشردهسازی هم با zstd یا lz4 و قبل از رمزنگاریه، و کدک رو میشه هر وقت خواستی بدون مهاجرت عوض کنی چون موقع خوندن تشخیص داده میشه.
قابلیتهای دیگهای مثل چکپوینتهای نقطهای فقطخواندنی، رپلیکاهای خواندنی (یه نویسنده و هر تعداد نمونهٔ فقطخواندنی روی همون باکت)، پشتیبانی از TRIM و یه استندبای اختیاری برای failover چندثانیهای هم داره. تیم ZeroFS ادعا میکنه پروژه رو حسابی تست کرده؛ از هزاران کیس pjdfstest و xfstests بگیر تا کامپایل کرنل لینوکس روی مونتها، تست فشار با stress-ng و حتی تستهای Jepsen برای صحت و دسترسپذیری بالا. طبق ادعای اونها کرنل لینوکس روی یه پول ZFS روی ولوم NBD در ۱۶ ثانیه کامپایل میشه.
نکات کلیدی:
- باکت S3 رو هم بهشکل فایلسیستم POSIX (روی NFS/9P) و هم دیسک بلاک خام (روی NBD) ارائه میده
- نوشتهها سگمنتهای تغییرناپذیرِ فشرده و رمزشدهان و خوندنهای گرم از کش محلی میان
- میشه با ZFS یه پول آینهای روی چند ریجن ساخت که با قطعیِ یه ریجن هم آنلاین میمونه
- رمزنگاری با XChaCha20-Poly1305 و مشتق کلید با Argon2id، فشردهسازی با zstd یا lz4
- روی S3 آمازون، Google Cloud Storage، Azure Blob و هر انبار سازگار با S3 کار میکنه




