Delete Automated Moodle Backup

Ilustration image of moodle

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 MOODLE_FILEDIR dengan lokasi path moodledata/filedir dan HASH_FILE dengan lokasi delete_list.txt sebelumnya.

Berikan permission pada delete_backup.sh, dan siap untuk dijalankan:

chmod +x delete_backup.sh
./delete_backup.sh

Semoga bermanfaat.

Previous Article

Strategi backup dengan restic

Next Article

Multi Form dengan InertiaJS

Write a Comment

Leave a Comment

Your email address will not be published. Required fields are marked *