Solaris mengatakan partisi saya menggunakan 100+ GB, tetapi partisi tersebut terlihat kosong. Di mana ruang yang digunakan?

0

Saya telnetting ke kotak Solaris 5.9 yang seharusnya menyimpan database oracle kami. Saya menghapus versi lama dari database, mencoba untuk pindah ke versi baru (seluruh database 90GB) tetapi saya terus mendapatkan kesalahan "disk penuh". Saya berlari

df -hk

dan menemukan bahwa partisi (disebut "/ d02") saya mencoba untuk memindahkan file ke total 135GB, 123GB digunakan, dan 10GB tersedia. Namun, saat saya berlari

ls -lah /d02

Saya mendapatkan 4 direktori: 3 diantaranya adalah 512B dan 1 adalah 8KB.

Ketika saya menghapus database oracle lama, apakah ruang entah bagaimana tidak dibebaskan? Bagaimana saya bisa membebaskan ruang, atau setidaknya melihat bagaimana ruang saya diambil?

Terima kasih atas waktunya.


sumber

Jawaban:

3

Saya menemukan jawabannya. Saya harus membunuh semua proses yang berpegang pada data itu - dalam hal ini Oracle.

Juga saya pikir saya seharusnya memposting ini ke serverfault. Maaf!


sumber
Dalam pembelaan Anda, terima kasih telah mengirim jawaban untuk pertanyaan Anda. Sekarang Anda hanya perlu menerimanya! :)
2

Ya, Anda menemukan akar masalahnya. Pada unix, menghapus file menghapus tautan dari daftar akses di direktori. Namun, itu mungkin tidak menghapus konten sampai pegangan file ditutup, yang terkait dengan file. Ini adalah masalah yang agak umum, yang sulit dilacak, setelah fakta.

Setelah pegangan file ditutup, tautan data kemudian dapat dirilis ke daftar gratis, seperti yang Anda ketahui. Kemungkinan besar, file log masih terbuka. Anda mungkin telah menemukan beberapa perilaku aneh setelah basis data dimulai kembali, karena lokasi lognya tidak ada, dan mulai masuk ke konsol atau tempat-tempat aneh lainnya seperti / tmp.

UnixGeek
sumber
2

+1 untuk @UnixGeek jawaban: menghapus file tidak membebaskan ruang disk sampai proses dengan file terbuka hilang.

Alat "standar" untuk membuat daftar file terbuka adalah lsof- Saya masih berpikir itu tidak termasuk dengan Solaris (sudah beberapa tahun sejak saya menjadi admin Solaris, atau bahkan menggunakannya), tetapi tersedia dari sunfreeware.

Google cepat menemukan utilitas Solaris pfilesdapat melakukan hal serupa (tapi saya belum menggunakannya).

Juga, fuserpada nama file, tetapi Anda harus memeriksanya sebelum Anda menghapus file. fuserjuga berguna untuk menemukan apa yang memiliki port terbuka, ketika suatu proses memberitahu Anda itu sudah digunakan.

Saya akan menyambungkan Unixersal Translator A Sysadmin (ROSETTA STONE) , panduan yang sangat berguna bagi siapa saja yang menggunakan beberapa Unices dan menerjemahkannya.

Trik bonus untuk memulihkan file yang dihapus dalam /procsistem berbasis yang masih terbuka oleh suatu proses:

cat /proc/<pid>/fd/<fd-of-delete-file>  > recovered.data

Saya telah menggunakan ini di Linux, di mana ls -l /proc/<pid>/fdmenunjukkan nama file awal (dan [dihapus]) di output.

toddkaufmann
sumber