Dalam kondisi tertentu, Moodle tidak bisa melakukan penghapusan terhadap automated backup. Bisa jadi karena cron yang gagal dieksekusi. Ini berbahaya, karena bisa mempengaruhi penggunaan storage. Jika tidak ditangani dengan cepat, penggunaan storage menjadi tak terkendali.
Biasanya ketika kita melakukan proses delete via menu course, file backup yang terhapus butuh waktu setidaknya 2 hari agar benar-benar terhapus dari disk. Ini terjadi karena, moodle akan menyimpan terlebih dahulu file yang terhapus pada
.moodledata/filedir
Tentu kita tidak ingin menunggu 2 hari apabila sudah sangat urgent untuk mengclaim space. Jadi tindakan penghapusan manual perlu dilakukan segera.
Pertama, lakukan query untuk mendapatkan daftar file backup dari basis data:
SELECT contenthash, filename FROM mdl_files WHERE component = 'backup' AND filearea = 'automated' AND filename LIKE '%.mbz';
Moodle tidak menyimpan file backup dengan nama sebenernya, dia akan menyimpan file backup dengan nama yang sudah ter-hash yang kita bisa ambil dari kolom contenthash
Sebagai contoh salah satu record contenhash
sebagai berikut:
0007c243dfae2597a088dee1c8be293bf30d1526
Artinya file tersebut terletak di dalam directory:
filedir/00/07/c243dfae2597a088dee1c8be293bf30d1526.
Perhatikan masing-masing 4 digit karakter pertama mewakili letak directory dan subdirectory lokasi sebenarnya, kemudian diikuti dengna nama file.
Sekarang kita tinggal melakukan proses delete dengan:
rm filedir/00/07/c243dfae2597a088dee1c8be293bf30d1526
Sangat melelahkan jika harus menghapusnya satu per satu, jadi kita bisa menggunakan bash script agar lebih cepat.
Buat sebuah file baru dengan nama delete_list.txt
, dan copy daftar contenthash dari hasil query sebelumnya. Contoh filenya seperti ini:
63dc38591a5fa319a2a331ddf16cfdbef467333b d2afecf2ea03548fb91b09098299ab251f1015b1 ad81e418ea06495f3c3c2d9210c5d36f22bbeddd
Buah sebuah bash script, contoh namanya delete_backup.sh
#!/bin/bash # Define the path to moodledata/filedir MOODLE_FILEDIR="./moodledata/filedir" # Define the path to your text file containing hashes HASH_FILE="./delete_list.txt" # Check if the hash file exists if [[ ! -f "$HASH_FILE" ]]; then echo "Error: Hash file not found!" exit 1 fi # Read each line (hash) from the file while IFS= read -r hash; do # Extract the first 2 characters (1st level directory) dir1="${hash:0:2}" # Extract the next 2 characters (2nd level directory) dir2="${hash:2:2}" # Construct the full file path FILE_PATH="$MOODLE_FILEDIR/$dir1/$dir2/$hash" # Check if the file exists before deleting if [[ -f "$FILE_PATH" ]]; then echo "Deleting: $FILE_PATH" rm -f "$FILE_PATH" else echo "File not found: $FILE_PATH" fi done < "$HASH_FILE" echo "Deletion process completed."
Sesuaikan
dengan lokasi path MOODLE_FILEDIR
moodledata/filedir
dan
dengan lokasi delete_list.txt sebelumnya.HASH_FILE
Berikan permission pada delete_backup.sh, dan siap untuk dijalankan:
chmod +x delete_backup.sh ./delete_backup.sh
Semoga bermanfaat.