2025年7月27日 星期日

Linux 目錄綁定(mount)解除(umount ) 到 RAM Disk /mnt/ramdisk

 想要將 Flask 專案中 static/passw_lib 目錄綁定(mount)到 RAM Disk /mnt/ramdisk,這樣可以提升存取效能並保護 SSD。

以下提供兩種常見方法來實現這個綁定:


✅ 方法一:使用 Linux mount --bind(不改動 Flask 原始碼)

步驟 1:先建立 RAM Disk(若尚未建立)

bash
sudo mkdir /mnt/ramdisk sudo mount -t tmpfs -o size=512M tmpfs /mnt/ramdisk

步驟 2:在 RAM Disk 中建立對應資料夾

bash
sudo mkdir -p /mnt/ramdisk/passw_lib

步驟 3:使用 mount --bind 把它綁定到 Flask 專案的 static 目錄

假設你的 Flask 專案結構如下:

cpp
your_project/ ├── app.py └── static/ └── passw_lib/ ← 要被綁定的位置

執行指令:

bash
sudo mount --bind /mnt/ramdisk/passw_lib /path/to/your_project/static/passw_lib

📌 注意:/path/to/your_project/ 請替換成你實際的 Flask 專案路徑!


驗證:

bash
mount | grep passw_lib

你會看到類似:

pgsql
/mnt/ramdisk/passw_lib on /path/to/your_project/static/passw_lib type none (rw,bind)

🧠 小提醒:

  • 如果你想要開機自動掛載,可以在 /etc/fstab 加入:

    fstab
    tmpfs /mnt/ramdisk tmpfs defaults,size=512M 0 0 /mnt/ramdisk/passw_lib /path/to/your_project/static/passw_lib none bind 0 0
  • 若 Flask 專案中程式會存取 static/passw_lib,那麼一旦綁定後,操作的實體資料其實都會進到 /mnt/ramdisk/passw_lib,不會寫入 SSD,非常適合用來儲存:

    • 動態產生圖片 / 檔案

    • 快速緩存 / 模型暫存檔

    • 預覽用的轉檔資料等


🚀 Bonus:自動化腳本

你也可以寫一個簡易的開機自動掛載腳本:

bash
#!/bin/bash sudo mkdir -p /mnt/ramdisk/passw_lib sudo mount -t tmpfs -o size=512M tmpfs /mnt/ramdisk sudo mount --bind /mnt/ramdisk/passw_lib /path/to/your_project/static/passw_lib

加上 chmod +x 讓它開機執行即可。


🧹 解除 mount --bind 綁定

假設你之前執行的是這樣的綁定:

bash
sudo mount --bind /mnt/ramdisk/passw_lib /path/to/your_project/static/passw_lib

那解除方式是:

bash
sudo umount /path/to/your_project/static/passw_lib

這會將 /mnt/ramdisk/passw_lib 與專案中的 static/passw_lib 解除綁定。解除後,static/passw_lib 回復為原本的目錄(如果有的話)。


🔄 如果你也想釋放 RAM Disk 空間(可選)

若你不只要解除綁定,還想釋放整個 /mnt/ramdisk RAM 空間:

1. 先解除子目錄綁定(例如 passw_lib):

bash
sudo umount /path/to/your_project/static/passw_lib

2. 再解除整個 /mnt/ramdisk 的 tmpfs 掛載:

bash
sudo umount /mnt/ramdisk

📌 小提醒:

  • 如果你在 /etc/fstab 中設定了自動掛載(或 mount --bind),也要記得手動移除那一行,否則下次開機會再掛載。

  • 若目錄正在被存取(例如被程式或終端佔用),umount 可能會失敗,可用 lsof 查詢誰在使用:

    bash
    sudo lsof +D /path/to/your_project/static/passw_lib


沒有留言:

張貼留言