Tommy 碎碎念
https://blog.teatime.com.tw/
Tommy Wu's blog
tommy
2024-03-19T18:50:12Z
-
Synology DSM 6.1 硬碟同步速度過慢的問題
https://blog.teatime.com.tw/1/post/486
<p>去年中的時候, 原本在 Synology DS1813+ 上面用的 WD 紅標 3TB 在過保後, SMART 出現了警告. 加上容量又快被我用光了, 所以... 就逐步汰換成 Toshiba 6TB. (壞第一顆時先把備用的 HSGT 4TB 換上去, 壞第二顆就開始換成 Toshiba 6TB 的硬碟) </p><p>在 Synology 的主機上, 原本同步時的速度不快, 但只要更改下面幾個設定值, 就能大幅提高同步的速度:</p><pre class="ini"><div class="insertcode">/proc/sys/dev/raid/speed_limit_min<br />/proc/sys/dev/raid/speed_limit_max<br />/sys/block/md2/md/stripe_cache_size</div></pre><p>我是把 speed_limit_min 設成 70000, 把 speed_limit_max 設成 0, 把 stripe_cache_size 設成 32768.</p>以我家的每個硬碟 3TB 的大小, 在 DS1813+上頭八個硬碟同步時, 原本同步的速度約要一星期才能同步完成, 改成上面的值之後, 約 12 小時就能同步完成. 當然, 同步時的效能也會降低不小, 只是就算沒改, 只要同步, 效能一樣會變差, 而且... RAID 最怕出問題的時間點就是在同步的時候, 同步時間越久就越不安全. 所以就算效能不佳, 但能越快完成同步越好.<br /><p>前陣子 Toshiba 6TB 在各大網站都出現特價, 所以就把剩下的硬碟補齊 (可惜只有剩兩顆). 換上後, 發現同步變很慢, 查了半天, 終於發現無論我把 stripe_cache_size 改成多大的數字, 都會被逐步降回 256, 這樣同步一顆硬碟要花上 2-3 個星期. 上網查了一下, 發現<a href="https://forum.synology.com/enu/viewtopic.php?t=127742" target="_blank">有人跟我同樣的問題</a>, 是發生在升級到 DSM 6.1 之後. </p><p>找了幾天都查不到解決方法 (有試過弄個 script 定時改回去, 不過.... 感覺上這樣改來改去的效能反而更差). 最後終於受不了, 在 DSM 上的技術支援中心發了一封信請求技術支援. 在 3 天後收到了回信, 有提到解決的方法.</p><p>在 DSM 6.1 上面, 可以在 /etc.defaults/synoinfo.conf 中新增下面兩個參數:</p><pre class="ini"><div class="insertcode">md_resync_cache_size<br />md_resync_disk_threshold</div></pre><p>md_resync_cache_size 是動態調整後的最小值, 預設是 256.</p><p>md_resync_disk_threshold 是上面這個動態調整的功能啟用的最小的同步硬碟數, 預設值是 8 (所以... 就是 8 個或 8 個以上的硬碟組成的 RAID 才會影響).</p><p>不打算用這個功能, 就把 md_resync_disk_threshold 設一個比你的硬碟數還大的值就可以. 如果要使用這功能,但是要把 stripe_cache_size 的值調大, 就改 md_resync_cahce_size 的值.</p><p>改了設定之後重開機就應該會生效了. 改好後, 同步一個硬碟的時間, 終於回到 12 小時左右的時間了. </p>
Synology
2017-04-10T10:02:51Z
tommy
-
啟用 Synology DS1813+ 的 btrfs 與 snapshot 功能
https://blog.teatime.com.tw/1/post/475
<p>去年開始 <a href="https://www.synology.com/zh-tw/" target="_blank">Synology</a> 在 DSM 5.2 在少數的幾個機型加入了 <a href="https://btrfs.wiki.kernel.org/index.php" target="_blank">btrfs</a> 的支援, 然後在今年的 DSM 6.0 上, 又增加了一些機型. 不過.... 我使用的 DS1813+ 並沒有在支援的機型內. </p><p>實際連線進去主機查看, lsmod | grep btrfs 可以看到 kernel 有加入 btrfs 的模組, 執行 btrfs 也可以看到也有放入 btrfs 的指令... 也許是為了與新的機器做出區隔, 故意不把 btrfs 的功能打開.... 所以... 只好自己動手來做了.</p><p>要啟用 btrfs 的功能, 只要修改 /etc/synoinfo.conf 加入下面的設定:</p><pre class="ini"><div class="insertcode"><span class="re1">support_btrfs</span><span class="sy0">=</span><span class="st0">"yes"</span></div></pre><p>然後重開機就可以在新建儲存空間時選擇 btrfs 來格式化.</p><p>在網路上查過的資料, 是建議下面三個設定: </p><pre class="ini"><div class="insertcode"><span class="re1">support_btrfs</span><span class="sy0">=</span><span class="st0">"yes"</span><br /><span class="re1">support_dr_snap</span><span class="sy0">=</span><span class="st0">"yes"</span><br /><span class="re1">support_share_snapshot</span><span class="sy0">=</span><span class="st0">"yes"</span></div></pre><p>不過... 第三個似乎原本就有打開, 第二個.... Synology 把 snapshot 的管理 web 介面用另一個 package 來處理, 而且... 似乎不允許裝在 DS1813+ 上, 所以就算打開來也沒作用.</p><p>因為沒有這個管理介面, 只好自改寫個 script 透過 btrfs 來處理.</p><pre class="bash"><div class="insertcode"><span class="co0">#!/bin/bash</span><br /> <br /><span class="co0">#</span><br /><span class="co0"># btrfs snapshot script</span><br /><span class="co0">#</span><br /><span class="co0"># 需傳入 4 個或 5 個參數</span><br /><span class="co0"># 第一個參數是 btrfs 的根目錄, 如 /volume1</span><br /><span class="co0"># 第二個參數是快照要存放的目錄, 為第一個參數下的子目錄, 如 snapshot</span><br /><span class="co0"># 第三個參數是快照的類別, 如 hourly, daily, weekly, monthly 之類</span><br /><span class="co0"># 可以是任意不含空白字串, 用來分類使用</span><br /><span class="co0"># 產生的快照目錄會以這個字串加底線再加日期時間為目錄名稱</span><br /><span class="co0"># 第四個參數是要產生快照的 subvolume 列表, 以空白區隔, 使用雙引號包起來</span><br /><span class="co0"># 這些 subvolume 是位於第一個參數下的子目錄</span><br /><span class="co0"># 第五個參數是要保留的快照數量, 沒有指定時為 2</span><br /> <br /><span class="co0"># btrfs 的根目錄</span><br /><span class="kw1">if</span> <span class="br0">[</span> <span class="st0">"x$1"</span> == <span class="st0">"x"</span> <span class="br0">]</span>; <span class="kw1">then</span><br /> <span class="kw3">echo</span> <span class="st0">"syntax: $0 btrfs_root snapshot_vol snapshot_type subvolume_list [keep_number]"</span><br /> <span class="kw3">exit</span> <span class="nu0">1</span><br /><span class="kw1">fi</span><br /><span class="re2">BTRFS_ROOT</span>=<span class="st0">"$1"</span><br /> <br /><span class="co0"># 快照要存放的子目錄 (位於 ${BTRFS_ROOT} 目錄下)</span><br /><span class="kw1">if</span> <span class="br0">[</span> <span class="st0">"x$2"</span> == <span class="st0">"x"</span> <span class="br0">]</span>; <span class="kw1">then</span><br /> <span class="kw3">echo</span> <span class="st0">"syntax: $0 btrfs_root snapshot_vol snapshot_type subvolume_list [keep_number]"</span><br /> <span class="kw3">exit</span> <span class="nu0">1</span><br /><span class="kw1">fi</span><br /><span class="re2">SNAPSHOT_DIR</span>=<span class="st0">"$2"</span><br /> <br /><span class="co0"># 快照類別</span><br /><span class="kw1">if</span> <span class="br0">[</span> <span class="st0">"x$3"</span> == <span class="st0">"x"</span> <span class="br0">]</span>; <span class="kw1">then</span><br /> <span class="kw3">echo</span> <span class="st0">"syntax: $0 btrfs_root snapshot_vol snapshot_type subvolume_list [keep_number]"</span><br /> <span class="kw3">exit</span> <span class="nu0">1</span><br /><span class="kw1">fi</span><br /><span class="re2">SNAPSHOT_TYPE</span>=<span class="st0">"$3"</span><br /> <br /><span class="co0"># 快照 subvolume 列表</span><br /><span class="kw1">if</span> <span class="br0">[</span> <span class="st0">"x$4"</span> == <span class="st0">"x"</span> <span class="br0">]</span>; <span class="kw1">then</span><br /> <span class="kw3">echo</span> <span class="st0">"syntax: $0 btrfs_root snapshot_vol snapshot_type subvolume_list [keep_number]"</span><br /> <span class="kw3">exit</span> <span class="nu0">1</span><br /><span class="kw1">fi</span><br /><span class="re2">SNAPSHOT_VOLUME_LIST</span>=<span class="st0">"$4"</span><br /> <br /><span class="co0"># 保留的快照數量</span><br /><span class="kw1">if</span> <span class="br0">[</span> <span class="st0">"x$5"</span> == <span class="st0">"x"</span> <span class="br0">]</span>; <span class="kw1">then</span><br /> <span class="re2">KEEP_SNAPSHOT</span>=<span class="nu0">2</span><br /><span class="kw1">else</span><br /> <span class="re2">KEEP_SNAPSHOT</span>=<span class="re4">$5</span><br /><span class="kw1">fi</span><br /> <br /><span class="co0"># 產生的快照存放的目錄</span><br /><span class="re2">SNAPSHOT_ROOT</span>=<span class="st0">"<span class="es3">${BTRFS_ROOT}</span>/<span class="es3">${SNAPSHOT_DIR}</span>"</span><br /> <br /><span class="co0"># 當天的日期時間</span><br /><span class="re2">TM</span>=<span class="sy0">`</span><span class="kw2">date</span> +<span class="sy0">%</span>Y<span class="sy0">%</span>m<span class="sy0">%</span>d<span class="sy0">%</span>H<span class="sy0">%</span>M<span class="sy0">%</span>S<span class="sy0">`</span><br /> <br /><span class="kw3">echo</span> <span class="st0">"-----------------------------------------------"</span><br /><span class="kw3">echo</span> <span class="st0">"處理快照類別: <span class="es3">${SNAPSHOT_TYPE}</span>"</span><br /><span class="kw3">echo</span> <span class="st0">"-----------------------------------------------"</span><br /><span class="kw1">if</span> <span class="br0">[</span> <span class="sy0">!</span> <span class="re5">-d</span> <span class="st0">"<span class="es3">${SNAPSHOT_ROOT}</span>"</span> <span class="br0">]</span>; <span class="kw1">then</span><br /> <span class="kw3">echo</span> <span class="st0">"目錄 <span class="es3">${SNAPSHOT_ROOT}</span> 不存在!"</span><br /> <span class="kw3">exit</span> <span class="nu0">1</span><br /><span class="kw1">fi</span><br /> <br /><span class="re2">ERRCODE</span>=<span class="nu0">0</span><br /><span class="kw1">for</span> vol <span class="kw1">in</span> <span class="co1">${SNAPSHOT_VOLUME_LIST}</span>; <span class="kw1">do</span><br /> <span class="re2">SUBVOLUME_ROOT</span>=<span class="st0">"<span class="es3">${BTRFS_ROOT}</span>/<span class="es3">${vol}</span>"</span><br /> <span class="re2">VOLUME_ROOT</span>=<span class="st0">"<span class="es3">${SNAPSHOT_ROOT}</span>/<span class="es3">${vol}</span>"</span><br /> <span class="kw3">echo</span> <span class="st0">"================================================="</span><br /> <span class="kw3">echo</span> <span class="st0">"處理快照目錄 <span class="es3">${VOLUME_ROOT}</span>"</span><br /> <span class="kw3">echo</span> <span class="st0">"================================================="</span><br /> <span class="kw1">if</span> <span class="br0">[</span> <span class="sy0">!</span> <span class="re5">-d</span> <span class="st0">"<span class="es3">${VOLUME_ROOT}</span>"</span> <span class="br0">]</span>; <span class="kw1">then</span><br /> <span class="kw3">echo</span> <span class="st0">"建立目錄: <span class="es3">${VOLUME_ROOT}</span>"</span><br /> <span class="kw2">mkdir</span> <span class="st0">"<span class="es3">${VOLUME_ROOT}</span>"</span><br /> <span class="kw1">if</span> <span class="br0">[</span> <span class="re4">$?</span> <span class="re5">-ne</span> <span class="nu0">0</span> <span class="br0">]</span>; <span class="kw1">then</span><br /> <span class="kw3">echo</span> <span class="st0">"無法建立目錄: <span class="es3">${VOLUME_ROOT}</span>"</span><br /> <span class="re2">ERRCODE</span>=<span class="nu0">1</span><br /> <span class="kw3">continue</span><br /> <span class="kw1">fi</span><br /> <span class="kw1">fi</span><br /> <span class="kw3">echo</span> <span class="st0">"移除舊的快照, 保留最近的 <span class="es3">${KEEP_SNAPSHOT}</span> 個快照"</span><br /> <span class="kw3">echo</span> <span class="st0">"-----------------------------------------------"</span><br /> <span class="re2">DIRS</span>=<span class="sy0">`</span><span class="kw2">ls</span> <span class="re5">-d</span> <span class="co1">${VOLUME_ROOT}</span><span class="sy0">/</span><span class="co1">${SNAPSHOT_TYPE}</span>_<span class="sy0">*</span> <span class="nu0">2</span><span class="sy0">>/</span>dev<span class="sy0">/</span>null <span class="sy0">|</span> <span class="kw2">sort</span> -r<span class="sy0">`</span><br /> <span class="re2">i</span>=<span class="nu0">0</span><br /> <span class="kw1">for</span> <span class="kw2">dirname</span> <span class="kw1">in</span> <span class="co1">${DIRS}</span>; <span class="kw1">do</span><br /> <span class="kw3">let</span> <span class="st0">"i += 1"</span><br /> <span class="kw1">if</span> <span class="br0">[</span> <span class="co1">${i}</span> <span class="re5">-le</span> <span class="co1">${KEEP_SNAPSHOT}</span> <span class="br0">]</span>; <span class="kw1">then</span><br /> <span class="kw3">echo</span> <span class="st0">"略過 <span class="es3">${i}</span>: <span class="es3">${dirname}</span>"</span><br /> <span class="kw3">continue</span>;<br /> <span class="kw1">fi</span><br /> <span class="kw3">echo</span> <span class="st0">"刪除 <span class="es3">${i}</span>: <span class="es3">${dirname}</span>"</span><br /> <span class="re2">bname</span>=<span class="sy0">`</span><span class="kw2">basename</span> <span class="co1">${dirname}</span><span class="sy0">`</span><br /> <span class="re2">CNT</span>=<span class="sy0">`</span>btrfs subvolume list <span class="st0">"<span class="es3">${BTRFS_ROOT}</span>"</span> <span class="sy0">|</span> <span class="kw2">grep</span> <span class="st0">"<span class="es3">${SNAPSHOT_DIR}</span>/<span class="es3">${vol}</span>/<span class="es3">${bname}</span>"</span> <span class="sy0">|</span> <span class="kw2">wc</span> -l<span class="sy0">`</span><br /> <span class="kw1">if</span> <span class="br0">[</span> <span class="st0">"<span class="es2">$CNT</span>"</span> == <span class="st0">"0"</span> <span class="br0">]</span>; <span class="kw1">then</span><br /> <span class="kw3">echo</span> <span class="st0">"<span class="es3">${dirname}</span> 不是快照"</span><br /> <span class="kw3">echo</span> <span class="st0">"刪除目錄: <span class="es3">${dirname}</span>"</span><br /> <span class="kw2">rmdir</span> <span class="st0">"<span class="es3">${dirname}</span>"</span><br /> <span class="kw1">if</span> <span class="br0">[</span> <span class="re4">$?</span> <span class="re5">-ne</span> <span class="nu0">0</span> <span class="br0">]</span>; <span class="kw1">then</span><br /> <span class="kw3">echo</span> <span class="st0">"無法刪除目錄: <span class="es3">${dirname}</span>"</span><br /> <span class="re2">ERRCODE</span>=<span class="nu0">1</span><br /> <span class="kw1">fi</span><br /> <span class="kw1">else</span><br /> <span class="kw3">echo</span> <span class="st0">"<span class="es3">${dirname}</span> 是快照"</span><br /> <span class="kw3">echo</span> <span class="st0">"刪除快照: <span class="es3">${dirname}</span>"</span><br /> btrfs subvolume delete <span class="st0">"<span class="es3">${dirname}</span>"</span><br /> <span class="kw1">if</span> <span class="br0">[</span> <span class="re4">$?</span> <span class="re5">-ne</span> <span class="nu0">0</span> <span class="br0">]</span>; <span class="kw1">then</span><br /> <span class="kw3">echo</span> <span class="st0">"無法刪除快照: <span class="es3">${dirname}</span>"</span><br /> <span class="re2">ERRCODE</span>=<span class="nu0">1</span><br /> <span class="kw1">fi</span><br /> <span class="kw1">fi</span><br /> <span class="kw1">done</span><br /> <span class="kw3">echo</span> <span class="st0">"-----------------------------------------------"</span><br /> <span class="re2">SNAPSHOT_TM</span>=<span class="st0">"<span class="es3">${VOLUME_ROOT}</span>/<span class="es3">${SNAPSHOT_TYPE}</span>_<span class="es3">${TM}</span>"</span><br /> <span class="kw1">if</span> <span class="br0">[</span> <span class="re5">-d</span> <span class="st0">"<span class="es3">${SNAPSHOT_TM}</span>"</span> <span class="br0">]</span>; <span class="kw1">then</span><br /> <span class="kw3">echo</span> <span class="st0">"目錄已存在: <span class="es3">${SNAPSHOT_TM}</span>"</span><br /> <span class="re2">ERRCODE</span>=<span class="nu0">1</span><br /> <span class="kw3">continue</span><br /> <span class="kw1">fi</span><br /> <span class="kw3">echo</span> <span class="st0">"建立新的快照: <span class="es3">${SNAPSHOT_TM}</span>"</span><br /> <span class="kw3">echo</span> <span class="st0">"-----------------------------------------------"</span><br /> btrfs subvolume snapshot -r <span class="st0">"<span class="es3">${SUBVOLUME_ROOT}</span>"</span> <span class="st0">"<span class="es3">${SNAPSHOT_TM}</span>"</span> <br /> <span class="kw1">if</span> <span class="br0">[</span> <span class="re4">$?</span> <span class="re5">-ne</span> <span class="nu0">0</span> <span class="br0">]</span>; <span class="kw1">then</span><br /> <span class="kw3">echo</span> <span class="st0">"無法為 <span class="es3">${SUBVOLUME_ROOT}</span> 建立新的快照 <span class="es3">${SNAPSHOT_TM}</span>"</span><br /> <span class="re2">ERRCODE</span>=<span class="nu0">1</span><br /> <span class="kw3">continue</span><br /> <span class="kw1">fi</span><br /><span class="kw1">done</span><br /><span class="kw3">echo</span> <span class="st0">"-----------------------------------------------"</span><br /> <br /><span class="kw3">exit</span> <span class="co1">${ERRCODE}</span></div></pre><p>檔案可以在 <a href="http://www.teatime.com.tw/~tommy/files/mysnapshot.sh.gz" target="_blank">http://www.teatime.com.tw/~tommy/files/mysnapshot.sh.gz</a> 下載.</p><p>透過這個 script, 可以自己在排程的地方,每小時, 每天, 每週或每月來產生新的快照並把舊的刪除.</p><p>這個 script 需要 4 或 5 個參數.</p><p>第一個參數是 btrfs 的根目錄, 例如: /volume1</p><p>第二個參數是產生的快照要存放的目錄, 是第一個參數下的一個子目錄 (透過共用資料夾來建立, 可以設定權限方便日後使用)</p><p>第三個參數是快照的類別, 用來區隔不同的排程產生的快照, 例如 hourly, daily, weekly monthly 之類的不包含空白的字串, 其際產生的快照目錄名稱會使用這個字串加上 _ 再加上 YYYYMMDDhhmmss 來當目錄名.</p><p>第四個參數是要產生快照的 subvolume 列表, 如果有多個, 請用雙引號處理, 每個 subvolume 用空白區隔, 如 "ftp backup download"</p><p>第五個參數是要保留的快照數量, 沒有指定時, 會保留兩個快照 (加上新增的就會有 3 個).</p><p>透過自訂的排程處理後, 會得到下列這樣的快照: </p><pre>root@DS1813:/volume1/snapshot# ls -la /volume1/snapshot/ftp/<br />total 0<br />d--------- 1 root root 1240 Apr 11 10:31 .<br />d--------- 1 root root 102 Apr 11 09:17 ..<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 daily_20160409115902<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 daily_20160410000102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 daily_20160411000102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160410103102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160410113102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160410123102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160410133102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160410143103<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160410153102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160410163102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160410173102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160410183102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160410193102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160410203102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160410213102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160410223102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160410233103<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160411003102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160411013102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160411023102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160411033102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160411043102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160411053102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160411063102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160411073102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160411083102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160411093102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 hourly_20160411103102<br />drwxr-xr-x 1 root root 280 Apr 7 16:00 weekly_20160410010102<br /> </pre><p>上面的方式... 只在 DS1813+ 上試過, 不保證你的機型也能用.... 不過... 基本上 lsmod | grep btrfs 有看到 btrfs 的模組, 執行 btrfs 有正確的指令, 就應該可以用吧. </p><p> </p><hr />2016/4/12 補充:<p>1. 上面的 script, 在建立快照的地方加上 -r 來產生唯讀的快照, 避免修改到快照的內容. </p><p>2. 如果需要還原時... 少數的檔案, 可以直接到該快照去複製回去就可以. 如果是整個 subvolume 都要還原, 就只能連進系統來下指令了. 例如把 /volume1/snapshot/ftp/daily_2016041000102 這個快照, 還原到 /volume1/ftp 時:</p><pre class="bash"><div class="insertcode"><span class="kw2">mv</span> <span class="sy0">/</span>volume1<span class="sy0">/</span><span class="kw2">ftp</span> <span class="sy0">/</span>volume1<span class="sy0">/</span>ftp.old<br /><span class="kw2">mv</span> <span class="sy0">/</span>volume1<span class="sy0">/</span>snapshot<span class="sy0">/</span>ftp<span class="sy0">/</span>daily_2016041000102 <span class="sy0">/</span>volume1<span class="sy0">/</span><span class="kw2">ftp</span><br />btrfs property <span class="kw1">set</span> <span class="re5">-ts</span> <span class="sy0">/</span>volume1<span class="sy0">/</span><span class="kw2">ftp</span> ro <span class="kw2">false</span></div></pre><p>簡單來說, btrfs 對於 subvolume/snapshot 的處理, 直接用搬移或改名就可以. 所以先把原本的路徑改名, 再把要還原的快照改成那個路徑名, 然後把唯讀的快照改成可以寫入就可以.</p><p>至於舊的 subvolume, 確定不要用就可以用 </p><pre class="bash"><div class="insertcode">btrfs subvolume delete <span class="sy0">/</span>volume1<span class="sy0">/</span>ftp.old</div></pre><p>刪除就可以. (有些 volume 可能系統使用中, 無法刪除.... 要重開機後才能刪)</p>
Synology
2016-04-10T19:27:32Z
tommy