$ usb-formatter

یک اسکریپت کوچک Bash که فلش USB را پاک می‌کند و آن را به صورت NTFS (پیش‌فرض) یا exFAT فرمت می‌کند، تا بعد از این که با mkusb برای نصب اوبونتو استفاده‌اش کردید، دوباره روی ویندوز خوانده شود. به هر چیزی که شبیه دیسک سیستم باشد دست نمی‌زند.

چه می‌کند

یک اجرا، پنج مرحله. اول wipefs امضاهای قدیمی را پاک می‌کند، بعد sgdisk یک GPT تازه با یک پارتیشن کامل می‌سازد، و در پایان mkfs.ntfs یا mkfs.exfat فایل‌سیستم را روی پارتیشن می‌نشاند. پیش از همه‌ی این‌ها، تمام پارتیشن‌های فلش از طریق udisksctl آن‌مونت می‌شوند تا udisks2 وسط کار دوباره مونتش نکند.

اگر مرحله‌ی wipe به این دلیل که چیزی فلش را در دست گرفته شکست بخورد، اسکریپت خودش دستورهای تشخیص (lsblk، mount، fuser، pvs، lvs) را اجرا می‌کند و قبل از خروج نشان می‌دهد چه چیزی مزاحم است.

نصب و اجرا

اسکریپت را بگیرید، اجرایی‌اش کنید، اول پیش‌نمایش بگیرید، بعد اجرا کنید:

curl -O https://raw.githubusercontent.com/cocodedk/usb-formatter/main/format-usb.sh
chmod +x format-usb.sh
./format-usb.sh /dev/sdX KINGSTON --dry-run
sudo ./format-usb.sh /dev/sdX KINGSTON
نکته
همیشه اول با --dry-run اجرا کنید. به sudo نیاز ندارد و تمام فرمان‌هایی را که قرار است اجرا کند چاپ می‌کند تا قبل از تحویل به sudo، مطمئن شوید دستگاه درست انتخاب شده.

گزینه‌ها

گزینهعملکرد
--ntfsفرمت NTFS. پیش‌فرض است. روی ویندوز بدون نصب چیزی خوانده می‌شود.
--exfatفرمت exFAT. برای فایل‌های بزرگ‌تر از ۴ گیگابایت روی دوربین و تلویزیون مناسب‌تر است.
-n, --dry-runهر مرحله را بدون تغییر چیزی چاپ می‌کند. به root نیاز ندارد.
-d, --diagnoseفقط دستگاه را بررسی می‌کند — مونت‌ها، holderها، LVM. وقتی اجرای قبلی busy داده.
-h, --helpراهنما را چاپ می‌کند و خارج می‌شود.

محافظ‌های ایمنی

فقط removable
مقدار /sys/block/<dev>/removable خوانده می‌شود. اگر ۱ نباشد، اسکریپت اجرا نمی‌شود. SSD داخلی و NVMe هرگز از این بررسی رد نمی‌شوند.
رد کردن mountpoint سیستم
اگر هر پارتیشن از این دستگاه روی /، /home یا /boot مونت باشد، اجرا قبل از هر تغییری متوقف می‌شود.
رد کردن swap فعال
اگر یک پارتیشن در حال حاضر به عنوان swap استفاده می‌شود (swapon --show)، اسکریپت آن را پاک نمی‌کند.
آن‌مونت تعاملی
آن‌مونت اول از طریق udisksctl unmount --no-user-interaction، بعد umount، و در نهایت umount -l به صورت lazy. به udisks2 گفته می‌شود دوباره مونت نکند.
تشخیص خودکار در صورت خطا
اگر wipefs شکست بخورد، بلاک تشخیص به صورت خودکار اجرا می‌شود و holderها، مونت‌ها و وضعیت LVM را قبل از خروج چاپ می‌کند.
تأیید با YES
در حالت زنده باید دقیقاً رشته‌ی YES را تایپ کنید تا ادامه پیدا کند. --dry-run از این مرحله رد می‌شود و چیزی تغییر نمی‌دهد.
هشدار
این اسکریپت داده‌ها را نابود می‌کند. هیچ چیزی از دستگاه هدف بازنمی‌گردد. خروجی dry-run را بخوانید، دوباره بخوانید، بعد اجرا کنید.

وقتی چیزی درست نیست

متداول‌ترین خطا "device busy" است — یک فایل‌منیجر همان لحظه که فلش را زده‌اید پارتیشنش را باز کرده. برای دیدن این که چه چیزی در دست گرفته، تشخیص را اجرا کنید:

sudo ./format-usb.sh /dev/sdX --diagnose

یک درخت lsblk، تمام مونت‌های زنده، خروجی fuser -v روی هر گره‌ی پارتیشن، و تصویر LVM از pvs و lvs را می‌بینید. فایل‌منیجر را ببندید (یا holder را kill کنید)، فلش را بکشید بیرون و دوباره بزنید، و یک بار دیگر امتحان کنید.