اگر از بیشتر کاربران بپرسید یک فایل در ویندوز کجا قرار دارد، نام پوشهای را میگویند و من هم تا پیش از این با آنها همنظر بودم. اما وقتی یک فایل متنی را بدون ساختن هیچ نسخهای، همزمان در دو پوشه متفاوت قرار دادم، نگاهم تغییر کرد. ویندوز سازوکاری داخلی برای این کار دارد که تنها به اجرای یک فرمان نیاز دارد.
برای آزمودن آن، هر کاری کردم تا از کار بیفتد: فایل را ویرایش و حذف کردم، میان درایوها جابهجایش کردم و به نتایجی رسیدم که انتظارشان را نداشتم.
یک فایل در دو پوشه
آیا ویندوز یک گیگابایت دیگر ذخیره کرده بود؟





برای شروع، فایل متنی سادهای به نام original.txt ساختم و آن را در پوشهای به نام Projects قرار دادم. سپس خط فرمان را باز کردم و این فرمان را اجرا کردم:
mklink /H C:\Test\Archive\second-name.txt C:\Test\Projects\original.txt
این فرمان یک پیوند سخت ساخت و نام دومی به نام second-name.txt به همان دادههای فایل داد. این نام تازه مستقیماً به دادههای همان فایلی اشاره میکرد که ساخته بودم. پس از اجرای فرمان، ویندوز هر دو مسیر را زیر نام یک فایل نمایش داد و به این ترتیب، ساخت پیوند سخت تأیید شد:
fsutil hardlink list C:\Test\Projects\original.txt
با اینکه ویندوز نشان میداد این دو نام به هم مرتبطاند، هیچ دادهای کپی نشده بود. فایلاکسپلورر کنار هر دو نام، اندازه 1GiB را نشان میداد، اما این اطلاعات چندان راهگشا نبود. برای بررسی دقیقتر، یک فایل آزمایشی 1GiB ساختم و دیدم فضای آزاد درایو C: حدود 1GiB کاهش یافت. سپس برای آن در پوشه دوم یک پیوند سخت ساختم؛ این بار فضای آزاد تنها ۶۷۱,۷۴۴ بایت، یعنی حدود ۶۵۶ KiB، کاهش یافت، نه یک گیگابایت کامل.
هنوز نمیتوانستم دلیل مصرف آن چند بایت اضافه را پیدا کنم، اما فهرست پیوندهای سخت تأیید میکرد که ویندوز نسخه دیگری از دادههای فایل نساخته است؛ فقط نام دومی به همان فایل افزوده بود.
یکی را ویرایش کنید، هر دو تغییر میکنند
همهچیز به شیوه ذخیرهسازی برنامه بستگی دارد

با این فرمان، یک خط به فایلی که نام دوم را داشت افزودم:
echo Added through the second name >> C:\Test\Archive\second-name.txt
وقتی original.txt را باز کردم، آن خط از قبل درونش بود. هیچ همگامسازی یا کپیکردنی در کار نبود؛ من فقط همان یک فایل را ویرایش کرده بودم.
افزودن متن سادهترین حالت است، زیرا دادهها مستقیماً در فایل موجود نوشته میشوند. بااینحال، بیشتر کاربران ترجیح میدهند فایل را در یک برنامه باز کنند، تغییر دهند و ذخیره کنند. من هم همین کار را امتحان کردم: second-name.txt را با نوتپد باز کردم، تغییری در آن دادم و فایل را ذخیره کردم. سپس به خط فرمان برگشتم و fsutil hardlink list را اجرا کردم.
بار دیگر هر دو مسیر در فهرست دیده میشدند و تغییرات نیز در original.txt وجود داشتند.
من این کار را فقط با نوتپد آزمودم؛ بنابراین ممکن است برنامههای دیگر رفتار متفاوتی داشته باشند. برخی برنامهها هنگام ذخیره، فایل موقت تازهای میسازند و آن را جایگزین فایل اصلی میکنند. این کار میتواند پیوند را از بین ببرد و باعث شود دو نام به دو فایل جداگانه اشاره کنند.
اگر از برنامه دیگری استفاده میکنید، فرمان fsutil hardlink list را اجرا کنید و مطمئن شوید هر دو مسیر همچنان نمایش داده میشوند.
نام را پاک کنید، داده را نگه دارید
فایل «اصلی» را پاک کردم و چیزی از دست نرفت

اینجا همان جایی بود که فکر میکردم شاید همهچیز از کار بیفتد. نخستین فایلی را که ساخته بودم، یعنی original.txt، حذف کردم. اما وقتی second-name.txt را باز کردم، هیچچیز تغییر نکرده بود و حتی تازهترین ویرایشهایم نیز همچنان باقی مانده بودند.
بااینحال، وقتی second-name.txt را هم حذف کردم، هر دو نام فایل از میان رفتند. آزمایش فایل 1GiB نیز همین موضوع را نشان داد: پس از حذف نام نخست، فضای آزاد درایو C: تقریباً تغییری نکرد؛ اما با حذف آخرین نام، حدود 1GiB فضا آزاد شد. تا زمانی که نامی به دادهها اشاره میکرد، آن دادهها در رایانه در دسترس باقی میماندند.
نام فایلها در ویندوز، ورودیهایی در فهرست پوشهاند که به فایلهای مشخص اشاره میکنند و خود دادهها جداگانه نگهداری میشوند. با حذف یک پیوند سخت، در واقع فقط یکی از برچسبها را برداشتهاید؛ دادههای مشترک همچنان از راه پیوند باقیمانده در دسترساند.
هر فایل در رایانه شما نامی دارد که خود یک ورودی در فهرست پوشه برای دسترسی به دادههای آن است. فرمان mklink /H امکان افزودن نام دوم را فراهم میکند. هرچند من یکی از نامها را original.txt گذاشتم، در عمل هیچ تفاوتی وجود نداشت؛ هیچیک از این دو نام هرگز از دیگری «اصلیتر» نبود.
در پایان به دو نتیجه عملی رسیدم. تا وقتی حتی یک پیوند سخت وجود داشته باشد، با حذف یکی از نامهایی که به داده اشاره میکنند، فضای اشغالشده آزاد نمیشود؛ تنها با برداشتن آخرین پیوند است که این فضا آزاد خواهد شد. دوم اینکه نباید پیوند سخت را با نسخه پشتیبان اشتباه گرفت، زیرا هر دو نام به همان داده دسترسی دارند و هر تغییری که از راه یکی ایجاد شود، از راه دیگری نیز دیده میشود.
تلاش من برای پیوند میان درایوهای C: و D: و راهکار مناسب برای گذر از مرز درایوها
اما کارم هنوز تمام نشده بود. کوشیدم فایلی را میان دو درایو پیوند دهم، ولی Windows بیدرنگ عملیات را رد کرد و این پیام را نشان داد: «سامانه نمیتواند فایل را به درایو دیگری منتقل کند.» همچنین نمیتوان برای پوشهها پیوند سخت ساخت یا میان دو درایو پیوند سخت ایجاد کرد. برای پوشهها یا فایلهای قرارگرفته روی درایوهای متفاوت، دو گزینه دیگر را در نظر میگیرم:
| پیوند سخت | میانبر | پیوند نمادین | |
|---|---|---|---|
| توضیح | نامی دیگر برای همان فایل | یک فایل .lnk که نشانی مقصد را نگه میدارد | پیوندی در سامانه فایل به مسیر مقصد |
| امکان پیوند میان درایوها | خیر | بله | بله |
| قابل استفاده برای پوشهها | خیر | بله | بله |
| حذف پیوند | سایر پیوندهای سخت همچنان به داده دسترسی دارند | مقصد باقی میماند و میانبر حذف میشود | مقصد باقی میماند و پیوند حذف میشود |
| حذف مقصد | سایر پیوندهای سخت همچنان به داده دسترسی دارند | ممکن است میانبر دیگر کار نکند | ممکن است پیوند شکسته شود |
اگر میخواهید فایلی روی همان درایو واقعاً نام دومی داشته باشد، پیوند سخت بهترین گزینه است. برای پیوند دادن فایلها میان درایوهای مختلف یا پیوند دادن پوشهها، از پیوند نمادین استفاده کنید.
منبع: این مطلب ترجمه و بومیسازی مقالهای از MakeUseOf به قلم Afam Onyimadu است. مشاهده مقاله اصلی