برگرداندن فضای دیسک پس از حذف فایل در محیط لینوکس

با حذف یک فایل در محیط لینوکس، معمولا فضای مصرفی ان فایل هم آزاد می شود اما در مواردی، این فضای مصرفی، به سیستم عامل برنمی گردد. در این متن به دلایل احتمالی این مسئله و چگونگی رفع آن می پردازیم.

در قسمت زیر خواهیم دید که با حذف یک فایل 5 گیگابایتی، فضای مصرفی این فایل، به پارتیشن بر نخواهد گشت.

SQL> alter tablespace MYTBS add datafile ‘/18c/base/oradata/NONCDB/mytbs02.dbf’ size 5g;

Tablespace altered.

 

[oracle@ol6 ~]$ df -h /

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda3       181G  140G   33G  82% /

 

[oracle@ol6 ~]$ rm -rf /18c/base/oradata/NONCDB/mytbs02.dbf

 

[oracle@ol6 ~]$ df -h /

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda3       181G  140G   33G  82% /

انتقال این فایل به recycle bin شاید اولین چیزی باشد که به ذهن متبادر شود! پس لیست فایلهای موجود در دایرکتوری Trash را بازبینی می کنیم:

[root@ol6 ~]# ls -la /root/.local/share/Trash/files

drwx—— 2 root root 4096 Jun 17 15:13 .

drwx—— 5 root root 4096 Aug 29  2028 ..

همانطور که می بینید، اثری از این فایل در دایرکتوری Trash نیست! پس باید به دنبال راهکار دیگری باشیم.

فایل mytbs02.dbf را در زمانی حذف کرده ایم که دیتابیس اوراکل در حال اجرا بوده است و این فایل هم به عنوان یکی از دیتافایلهای دیتابیس، در حال استفاده و اصطلاحا توسط پروسسهای اوراکلی، open شده بود دلیل عدم برگشت فضای این فایل، به همین مسئله برمی گردد!

با دستور زیر لیست فایلهای بازی(open) که حذف شده اند را می بینیم:

[oracle@ol6 ~]$ lsof |grep deleted

ora_dbw0_ 14825    oracle  268uW     REG    8,3 5368717312 6960459 /18c/base/oradata/NONCDB/mytbs02.dbf (deleted)

ora_ckpt_ 14829    oracle  266u      REG    8,3 5368717312 6960459 /18c/base/oradata/NONCDB/mytbs02.dbf (deleted)

می بینیم که این دیتافایل توسط بک گراند پروسسهای dbw و ckpt در حال استفاده می باشد و file descriptor آن برابر با 268 و 266 می باشد:

[root@ol6 ~]# ls -l /proc/14825/fd/268

lrwx—— 1 oracle oinstall 64 Jun 17 15:23 /proc/14825/fd/268 -> /18c/base/oradata/NONCDB/mytbs02.dbf (deleted)

این دیتافایل هنوز در عمل حذف نشده و قابل بازیابی می باشد که قبلا در مقاله ای، نحوه بازیابی آن را شرح داده ایم.

پس برای آزاد کردن فضای مصرفی این فایل، کار آسانی را در پیش داریم! با از بین بردن و یا اصطلاحا kill کردن این دو پروسس، فضای اشغال شده توسط این فایل هم آزاد خواهد شد:

[oracle@ol6 ~]$ kill -9 14825 14829

با دستور زیر می بینید که این فضا ازاد شده است:

[oracle@ol6 ~]$ df –h /

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda3       181G  135G   38G  79% /

همچنین با restart کردن دیتابیس اوراکل هم این فضای مصرف شده به دیسک برمی گردد. البته ممکن است نخواهیم دیتابیس را restart کنیم که در این صورت، راه حل دیگری هم وجود دارد:

[root@ol6 ~]#  cat /dev/null > /proc/14825/fd/268

 

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.