عنوان:

‫مدیریت پیشرفته آرشیوهای Tar در NET 11.: کنترل دقیق بر فرمت‌های ذخیره‌سازی


نویسنده: وحید نصیری
تاریخ: ۱۴۰۵/۰۴/۰۶ ۰۹:۳۰
آدرس: www.dntips.ir
در دنیای توسعه نرم‌افزار، مدیریت، فشرده‌سازی و بسته‌بندی فایل‌ها یکی از نیازمندی‌های پایه‌ای و روزمره است. بسیاری از توسعه‌دهندگان در مواجهه با فرآیند فشرده‌سازی به سراغ ابزارهایی مانند Gzip می‌روند. اما یک نکته فنی و کلیدی وجود دارد که اغلب نادیده گرفته می‌شود: پروتکل gzip به تنهایی قادر به فشرده‌سازی چندین فایل یا یک پوشه به صورت همزمان نیست و ساختار آن صرفاً برای فشرده‌سازی «یک تک فایل» (Single File) طراحی شده است.
برای رفع این محدودیت و فشرده‌سازی مجموعه‌ای از فایل‌ها، ابتدا باید آن‌ها را به یک فرمت واسط که تمام فایل‌ها را در قالب یک فایل واحد تجمیع می‌کند، تبدیل کنیم. این فرمت واسط چیزی نیست جز Tar (Tape Archive). فرآیند استاندارد در اکوسیستم‌های لینوکس و مک نیز به همین صورت است؛ ابتدا یک ساختار یکپارچه با پسوند .tar ایجاد شده و سپس با ابزاری مانند Gzip فشرده می‌شود تا فایل نهایی با پسوند .tar.gz به دست آید. مایکروسافت با درک این نیاز، در نسخه‌های اخیر دات‌نت پشتیبانی بومی از Tar را معرفی کرد و اکنون در NET 11.، قابلیت‌های بسیار ارزشمندی برای کنترل دقیق‌تر این آرشیوها در اختیار توسعه‌دهندگان قرار داده است.

انواع فرمت‌های آرشیو Tar
شاید در نگاه اول تصور شود که تمام فایل‌های Tar ساختار یکسانی دارند، اما در واقعیت، این استاندارد در طول دهه‌های گذشته تکامل یافته و چندین نسخه و فرمت مختلف از آن ایجاد شده است. هر یک از این فرمت‌ها محدودیت‌ها و ویژگی‌های خاص خود را در مدیریت نام فایل‌های طولانی، حجم فایل‌ها و متاداده‌ها دارند:
  • v7 (Version 7 AT&T Unix): قدیمی‌ترین و اولین نسخه استاندارد Tar متعلق به سال ۱۹۷۹. این فرمت محدودیت‌های شدیدی در طول نام فایل (حداکثر ۱۰۰ کاراکتر) و حجم فایل دارد.
  • Ustar (POSIX IEEE 1003.1-1988): استاندارد یونیکس قدیمی که محدودیت‌های نسخه v7 را تا حدی بهبود بخشید، اما همچنان برای سیستم‌های مدرن با مسیرهای طولانی محدودکننده است.
  • GNU Tar: فرمت اختصاصی پروژه GNU که به طور گسترده در توزیع‌های لینوکس استفاده می‌شود. این فرمت محدودیت‌های حجم و طول مسیر را به شکل مؤثری برطرف کرده است.
  • Pax (POSIX IEEE 1003.1-2001): استاندارد مدرن و منعطف پوزیکس (معروف به Pax Interchange) که به عنوان استاندارد طلایی و سازگارترین فرمت امروزی شناخته می‌شود. این فرمت از ویژگی‌های پیشرفته مانند متاداده‌های سفارشی و یونیکد (UTF-8) پشتیبانی می‌کند.

بررسی وضعیت در NET 10.
در نسخه NET 10.، کلاس TarFile ابزاری عالی برای ساخت آرشیو از پوشه‌ها ارائه می‌داد، اما توسعه‌دهنده هیچ کنترلی روی فرمت خروجی نداشت. در این نسخه، دات‌نت به صورت هاردکد (Hardcoded) همیشه آرشیوها را با فرمت Pax تولید می‌کرد:
// در دات‌نت 10 خروجی همیشه با فرمت Pax ایجاد می‌شد و امکان تغییر آن وجود نداشت
await TarFile.CreateFromDirectoryAsync(
    sourceDirectoryName: "/source/", 
    destinationFileName: "/target/archive.tar",
    includeBaseDirectory: true
);

تحول در NET 11.: معرفی قابلیت تعیین فرمت
اگرچه فرمت Pax به عنوان پیش‌فرضِ بسیار مناسبی عمل می‌کند، اما در سناریوهای سازمانی و سیستم‌های قدیمی (Legacy)، نیاز به تعامل با فرمت‌های دیگر مانند GNU Tar یا Ustar به وفور حس می‌شود. در NET 11.، با اضافه شدن یک اورلود (Overload) جدید به متدهای CreateFromDirectory و CreateFromDirectoryAsync، امکان تعیین فرمت دقیق خروجی از طریق انام (Enum) TarEntryFormat فراهم شده است.

جدول مقادیر انام TarEntryFormat در NET 11.

نام مقدارمقدار عددیتوضیحات فنی
Unknown0فرمت ساختار آرشیو نامشخص یا تعیین‌نشده است.
V71فرمت سنتی AT&T Unix متعلق به سال 1979.
Ustar2فرمت استاندارد POSIX IEEE 1003.1-1988 Unix.
Pax3فرمت استاندارد مدرن POSIX IEEE 1003.1-2001.
Gnu4فرمت اختصاصی و پرکاربرد پروژه GNU Tar.
نحوه استفاده در کد (NET 11.)
حالا شما می‌توانید به سادگی آرشیو خود را با فرمت دلخواه (مثلاً فرمت محبوب گنو Gnu) تولید کنید:
using System.Formats.Tar;

// مشخص کردن فرمت هدف به عنوان یک پارامتر ورودی جدید در دات‌نت 11
await TarFile.CreateFromDirectoryAsync(
    sourceDirectoryName: "/source/", 
    destinationFileName: "/target/archive.tar",
    includeBaseDirectory: true, 
    format: TarEntryFormat.Gnu
);
نکته: انتخاب فرمت مناسب مستقیماً بر روی سازگاری سیستم مقصد تاثیرگذار است. اگر آرشیو شما قرار است در یک کانتینر لینوکسی قدیمی یا سیستم‌های توزیع‌شده با ابزارهای بومی گنو استخراج شود، تنظیم فرمت روی TarEntryFormat.Gnu جلوی خطاهای احتمالی ناهماهنگی متاداده‌ها و هدرهای نامتعارف را خواهد گرفت.

نتیجه‌گیری
تغییرات اعمال شده در NET 11. پیرامون ابزار TarFile، انعطاف‌پذیری بالایی را برای توسعه‌دهندگانی که در اکوسیستم‌های چندگانه (Cross-platform) فعالیت می‌کنند به ارمغان آورده‌است. در حالی که دات‌نت به خوبی فرآیند یکپارچه‌سازی فایل‌ها را برای حل محدودیت فشرده‌سازی Gzip مدیریت می‌کند، اکنون کنترل کامل ساختار و استانداردهای داخلی این آرشیوها نیز به دست برنامه‌نویس سپرده شده است تا بیشترین میزان سازگاری، بدون پیچیدگی‌های ابزارهای جانبی حاصل شود.