想到昨天還前天朋友問的,說伺服器的硬碟空間沒了,買了新的硬碟來用,有沒有辦法用一個比較便利的方法來掛載使用。我那時回答是說,得掛載到新的資料夾,再使用 symbolic link 方式去處理,今天看到 overlayfs,覺得應該可以用,就研究了一下。
主要是看了這三篇
第一篇側重於原理,第二篇很簡單,我覺得第三篇比較清楚。
是這樣的,本來看完第一篇跟第二篇,在嘗試的時候 (我是用 dd 做磁碟映像來掛載),一直遇到 wrong fs type, bad option, bad superblock on overlay 的問題,掛載不起來。看完第三篇,才知道自己錯在哪裡,就是 upperdir 必須要跟 workdir 在同個磁碟上,這樣掛載才不會有問題。
下面就開始實作,建立 olddisk,這裡把它當作是舊的 /home
dd if=/dev/zero of=olddisk bs=1024 count=1024 mkfs.ext4 olddisk
如果是真實情況的話,那麼這原本是掛載到 /home,這裡就把它改掛載到 /mnt/home。
sudo mkdir -p /mnt/home sudo mount olddisk /mnt/home sudo chown -R $USER:$USER /mnt/home
建立使用者目錄,盡可能模擬真實狀況,在真實狀況下,這步驟不用做
mkdir -p /mnt/home/user{1,2,3,4,5}
然後重新掛載為唯讀,模擬為以後都不去動的狀態
sudo mount -o remount,ro /mnt/home
建立 newdisk ,也就是模擬為新的硬碟
dd if=/dev/zero of=newdisk bs=1024 count=8192 mkfs.ext4 newdisk
掛載到 /mnt/newdisk
sudo mkdir -p /mnt/newdisk sudo mount newdisk /mnt/newdisk sudo chown -R $USER:$USER /mnt/newdisk
在新磁碟上建立兩個目錄,一個 home,一個 workdir。home 是 upperdir,workdir 還是 workdir,至於什麼是 upperdir,什麼是 workdir ,這裡就不多做說明了。
mkdir -p /mnt/newdisk/{home,workdir}
好,開始來掛載 overlay,這裡是掛載到 /home1,實際狀況會是 /home
sudo mount -t overlay none -o lowerdir=/mnt/home,upperdir=/mnt/newdisk/home,workdir=/mnt/newdisk/workdir /home1
看看 /home1
ls /home1 # 結果: # lost+found user1 user2 user3 user4 user5
建立新的使用者資料夾看看
mkdir -p /home1/user{6,7,8,9,10}
再來看看 /home1 有什麼變化
ls /home1 # 結果: # lost+found user1 user10 user2 user3 user4 user5 user6 user7 user8 user9
這時可以看到有確實的增加了 user6, user7, user8, user9, user10 這些資料夾,然後來看看新的硬碟裡怎麼樣了
ls /mnt/newdisk/home # 結果: # user10 user6 user7 user8 user9
這時可以看到新的使用者資料夾在這邊了,那 workdir 呢?
ls /mnt/newdisk/workdir # 結果: # work
會發現只有 work,看來這是 kernel 工作用的目錄,可以忽略。那如果去原來在舊磁碟的使用者資料夾裡新增或修改檔案,會怎麼樣呢?
cd /home1/user1 touch {x,y}.md cd /home1/user2 touch z.md
看舊磁碟上有沒有變化
ls /mnt/home/user1 # 結果: #
會發現一樣是空的。來看看新磁碟
ls /mnt/newdisk/home/user1 # 結果: # x.md y.md
至此,存取一樣都在 /home1,但新的資料都會被放在新磁碟上了。
整理一下,在實際情況時的處置
- 接上新硬碟,分割、格式化好之後,掛載到 /mnt/newdisk ,建立兩個資料夾:home, workdir
- 如果 /home 是在分割區的話,先卸載,改掛載到 /oldhome;如果是跟 / 在一起的話,改個名字,例如 /oldhome
- 掛載:sudo mount -t overlay none -o lowerdir=/oldhome,upperdir=/mnt/newdisk/home,workdir=/mnt/newdisk/workdir /home
- 修改 /etc/fstab ,這樣下次開機時,才會生效。修改重點有三,一是原來的 /home,二是掛載新的磁碟,三是加入 overlay 的處理。
沒有留言:
張貼留言