FALLOCATE(1) دستورهای کاربری FALLOCATE(1)

fallocate - پیش‌تخصیص یا آزادسازی فضای دیسک برای یک فایل

fallocate [-c|-p|-z|-w] [-o offset] -l length [-n] filename

fallocate -d [-o offset] [-l length] filename

fallocate -r [-o offset] filename

fallocate -x [-o offset] -l length filename

دستور fallocate برای دستکاری فضای دیسک تخصیص‌یافته به یک فایل، خواه برای آزادسازی یا پیش‌تخصیص آن، استفاده می‌شود. برای سیستم‌فایل‌هایی که از فراخوان سیستمی fallocate(2) پشتیبانی می‌کنند، پیش‌تخصیص با تخصیص بلوک‌ها و علامت‌گذاری آن‌ها به‌عنوان مقداردهی‌نشده (uninitialized) به‌سرعت انجام می‌شود و نیازی به ورودی/خروجی (I/O) روی بلوک‌های داده ندارد. این روش بسیار سریع‌تر از ایجاد یک فایل با پر کردن آن با صفر است.

وضعیت خروج بازگردانده‌شده توسط fallocate در صورت موفقیت 0 و در صورت شکست 1 است.

آرگومان‌های length و offset می‌توانند با پسوندهای ضربی مانند KiB (=1024)، MiB (=1024*1024) و به همین ترتیب برای GiB، TiB، PiB، EiB، ZiB و YiB (عبارت «iB» اختیاری است، برای مثال «K» به معنای همان «KiB» است) یا پسوندهای KB (=1000)، MB (=1000*1000) و به همین ترتیب برای GB، TB، PB، EB، ZB و YB همراه شوند.

گزینه‌های --collapse-range، --dig-holes، --report-holes، --punch-hole، --zero-range، --write-zeroes و --posix مانعة‌الجمع (ناسازگار با یکدیگر) هستند.

-c, --collapse-range

یک محدوده بایتی را از فایل حذف می‌کند، بدون اینکه حفره‌ای باقی بگذارد. محدوده بایتی که باید جمع شود از offset شروع شده و به اندازهٔ length بایت ادامه می‌یابد. پس از اتمام عملیات، محتویات فایل که از مکان offset+length شروع می‌شود، به مکان offset پیوست می‌شود و اندازه فایل به اندازهٔ length بایت کوچکتر خواهد شد. گزینهٔ --keep-size را نمی‌توان برای عملیات collapse-range مشخص کرد.

از لینوکس 3.15 برای ext4 (تنها برای فایل‌های مبتنی بر extent) و XFS در دسترس است.

یک سیستم‌فایل ممکن است برای اطمینان از اجرای کارآمد، محدودیت‌هایی در دانه‌بندی عملیات اعمال کند. معمولاً offset و length باید مضربی از اندازهٔ بلوک منطقی سیستم‌فایل باشند که بر اساس نوع و پیکربندی سیستم‌فایل متفاوت است. اگر یک سیستم‌فایل چنین الزامی داشته باشد، در صورت عدم رعایت آن، عملیات با خطای EINVAL شکست خواهد خورد.

-d, --dig-holes

شناسایی و ایجاد حفره‌ها (dig holes). این گزینه فایل را به‌صورت درجا (in-place) و بدون استفاده از فضای اضافی دیسک به یک فایل پراکنده (sparse) تبدیل می‌کند. حداقل اندازهٔ حفره به اندازهٔ بلوک I/O سیستم‌فایل بستگی دارد (معمولاً ۴۰۹۶ بایت). همچنین هنگام استفاده از این گزینه، --keep-size به‌طور ضمنی فعال می‌شود. اگر هیچ محدوده‌ای با --offset و --length مشخص نشود، کل فایل برای یافتن حفره‌ها تحلیل می‌شود.

می‌توانید این گزینه را مانند اجرای «cp --sparse» و سپس تغییر نام فایل مقصد به نام اصلی، بدون نیاز به فضای دیسک اضافه در نظر بگیرید.

برای فهرستی از سیستم‌فایل‌های پشتیبانی‌شده به --punch-hole مراجعه کنید.

-r, --report-holes

فایل را پویش کرده و توزیع حفره‌ها را بدون تغییر در فایل گزارش می‌دهد. دو نوع حفره نمایش داده می‌شود: حفره‌های فایل (file holes) – بلوک‌هایی که سیستم‌فایل تخصیص نداده است (توسط SEEK_HOLE گزارش می‌شود)؛ حفره‌های داده (data holes) – محدوده‌هایی در داخل فایل که از نظر منطقی با بایت‌های صفر پر شده‌اند اما همچنان فضای دیسک را اشغال می‌کنند.

برای هر حفره، آفست، پایان و اندازه بر حسب بایت در حالت پرگو (verbose) چاپ می‌شود و پس از آن خلاصه‌ای ارائه می‌گردد که به‌طور پیش‌فرض اندازهٔ کل و درصد فایل را که هر نوع حفره تشکیل می‌دهد نشان می‌دهد. اگر هیچ آفستی با --offset مشخص نشود، کل فایل پویش می‌شود.

این گزینه فقط‌خواندنی (read-only) است و می‌توان آن را روی هر فایلی برای تخمین میزان فضایی که می‌تواند توسط --dig-holes بازپس‌گیری شود، استفاده کرد.

برای فهرستی از سیستم‌فایل‌های پشتیبانی‌شده به --punch-hole مراجعه کنید.

-i, --insert-range

یک حفره به اندازهٔ length بایت از offset درج می‌کند و داده‌های موجود را جابه‌جا می‌کند.

برای XFS (از لینوکس 4.1) و ext4 (از لینوکس 4.2) پشتیبانی می‌شود.

-l, --length length

طول محدوده را بر حسب بایت مشخص می‌کند.

-n, --keep-size

طول ظاهری فایل را تغییر نمی‌دهد. این ممکن است در عمل بلوک‌هایی را فراتر از انتهای فایل (EOF) تخصیص دهد که با truncate می‌توان آن‌ها را حذف کرد.

-o, --offset offset

آفست شروع محدوده را بر حسب بایت مشخص می‌کند.

-p, --punch-hole

فضا را در محدودهٔ بایتی که از offset شروع شده و تا length بایت ادامه دارد، آزاد می‌کند (یعنی یک حفره ایجاد می‌کند). در محدودهٔ مشخص‌شده، بلوک‌های ناقص سیستم‌فایل صفر می‌شوند و بلوک‌های کامل سیستم‌فایل از فایل حذف می‌گردند. پس از یک فراخوانی موفق، خواندن‌های بعدی از این محدوده، صفر برمی‌گردانند. این گزینه را نمی‌توان همزمان با گزینهٔ --zero-range مشخص کرد. همچنین هنگام استفاده از این گزینه، --keep-size به‌طور ضمنی فعال می‌شود.

برای XFS (از لینوکس 2.6.38)، ext4 (از لینوکس 3.0)، Btrfs (از لینوکس 3.7)، tmpfs (از لینوکس 3.5) و gfs2 (از لینوکس 4.16) پشتیبانی می‌شود.

-v, --verbose

حالت پرگو را فعال می‌کند.

-w, --write-zeroes

فضا را در محدودهٔ بایتی که از offset شروع شده و به اندازهٔ length بایت ادامه می‌یابد صفر می‌کند. در محدودهٔ مشخص‌شده، بلوک‌های نوشته‌شده برای نواحی شامل حفره‌های فایل پیش‌تخصیص داده می‌شوند. پس از یک فراخوانی موفق، خواندن‌های بعدی از این محدوده صفر برمی‌گردانند و نوشتن‌های بعدی روی آن محدوده نیازی به تغییرات بیشتر در متاداده نگاشت فایل ندارند.

صفر کردن در درون سیستم‌فایل انجام می‌شود. سیستم‌فایل ممکن است از یک دستور صفر کردن با شتاب‌دهنده سخت‌افزاری استفاده کند یا نوشتن‌های معمولی را ارسال نماید. این رفتار به طراحی سیستم‌فایل و سخت‌افزار موجود بستگی دارد.

گزینهٔ --keep-size را نمی‌توان برای عملیات write-zeroes مشخص کرد، زیرا تخصیص بلوک‌های نوشته‌شده فراتر از اندازهٔ inode مجاز نیست.

-x, --posix

حالت عملیاتی POSIX را فعال می‌کند. در این حالت عملیات تخصیص همیشه کامل می‌شود، اما اگر تخصیص سریع توسط سیستم‌فایل زیرین پشتیبانی نشود، ممکن است زمان بیشتری طول بکشد.

-z, --zero-range

فضا را در محدودهٔ بایتی که از offset شروع شده و به اندازهٔ length بایت ادامه می‌یابد صفر می‌کند. در محدودهٔ مشخص‌شده، بلوک‌ها برای نواحی شامل حفره‌های فایل پیش‌تخصیص داده می‌شوند. پس از یک فراخوانی موفق، خواندن‌های بعدی از این محدوده صفر برمی‌گردانند.

صفر کردن در درون سیستم‌فایل ترجیحاً با تبدیل محدوده به extentهای نوشته‌نشده انجام می‌شود. این رویکرد به این معنی است که محدودهٔ مشخص‌شده به‌صورت فیزیکی روی دستگاه با صفر پر نمی‌شود (به‌جز بلوک‌های جزئی در دو انتهای محدوده) و ورودی/خروجی (I/O) تنها برای به‌روزرسانی متاداده نیاز است.

گزینهٔ --keep-size می‌تواند برای جلوگیری از تغییر طول فایل مشخص شود.

از لینوکس 3.14 برای ext4 (تنها برای فایل‌های مبتنی بر extent) و XFS در دسترس است.

-h, --help

نمایش متن راهنما و خروج.

-V, --version

نمایش نسخه و خروج.

Eric Sandeen <sandeen@redhat.com>, Karel Zak <kzak@redhat.com>

truncate(1), fallocate(2), posix_fallocate(3)

برای گزارش باگ‌ها از ردیاب مشکلات https://github.com/util-linux/util-linux/issues.

دستور fallocate بخشی از بستهٔ util-linux است که می‌توان آن را از بایگانی هسته لینوکس https://www.kernel.org/pub/linux/utils/util-linux.

2026-09-02 util-linux 2.42.3