adb remount overlayfs的说明
在android R項(xiàng)目中執(zhí)行adb remount的時候,能看到"Using overlayfs for xxx"的打印,類似如下:
#adb root restarting adbd as root#adb remount Disabling verity for /system Using overlayfs for /system Disabling verity for /system_ext Using overlayfs for /system_ext Disabling verity for /product Using overlayfs for /product Using overlayfs for /vendor Now reboot your device for settings to take effect remount succeeded那這些打印表示什么意思呢?
看打印的內(nèi)容來看,有overlayfs,先看一下wiki上的描述:https://zh.wikipedia.org/wiki/OverlayFS
截取其中一段描述:
“OverlayFS的主要機(jī)制涉及當(dāng)兩個文件系統(tǒng)提供同一名稱的目錄時目錄訪問的合并。除此之外,OverlayFS呈現(xiàn)其中一個所產(chǎn)生的對象(如果有),“上層”文件系統(tǒng)優(yōu)先。OverlayFS與其他覆蓋型文件系統(tǒng)不同,OverlayFS合并的目錄子樹不一定是來自不同的文件系統(tǒng)。”
看到這應(yīng)該明白了,是為了讓lower層的vendor等分區(qū)仍然為read-only只讀,但是又有一個對應(yīng)的upper層可讀可寫,兩層不同的文件則放入到work層。
舉個例子,當(dāng)adb remount重啟設(shè)備后,往vendor分區(qū)push內(nèi)容,這時會在其upper層對應(yīng)創(chuàng)建相同文件名的文件出來,如果修改此文件名的文件,則會優(yōu)先修改upper層的數(shù)據(jù)。
overlay后,能看到vendor有三層了,lowerdir、upperdir、workdir
google在android項(xiàng)目上引入overlayfs就很巧妙了,如果沒有這個overlayfs,adb remount后vendor分區(qū)本身就需要修改為rw可讀可寫了,而有了overlayfs,vendor分區(qū)還是ro只讀的,原始數(shù)據(jù)不用修改。
/dev/block/dm-3 on /vendor type ext4 (ro,seclabel,relatime,discard) overlay on /vendor type overlay (ro,seclabel,noatime,lowerdir=/vendor,upperdir=/mnt/scratch/overlay/vendor/upper,workdir=/mnt/scratch/overlay/vendor/work,override_creds=off)adb remount執(zhí)行overlayfs動作的地方在fs_mgr_remount.cpp的do_remount函數(shù),感興趣的可以繼續(xù)跟蹤一下如下代碼的詳細(xì)實(shí)現(xiàn)。
if (fs_mgr_overlayfs_setup(nullptr, mount_point.c_str(), &change, just_disabled_verity)) {if (change) {LOG(INFO) << "Using overlayfs for " << mount_point;reboot_later = can_reboot;user_please_reboot_later = true;setup_overlayfs = true;}} else if (errno) {PLOG(ERROR) << "Overlayfs setup for " << mount_point << " failed, skipping";retval = BAD_OVERLAY;it = partitions.erase(it);continue;}總結(jié)
以上是生活随笔為你收集整理的adb remount overlayfs的说明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html 12306页面实现,jQuer
- 下一篇: Google Maps API编程资源大