adb remount overlayfs的说明
在android R項目中執行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那這些打印表示什么意思呢?
看打印的內容來看,有overlayfs,先看一下wiki上的描述:https://zh.wikipedia.org/wiki/OverlayFS
截取其中一段描述:
“OverlayFS的主要機制涉及當兩個文件系統提供同一名稱的目錄時目錄訪問的合并。除此之外,OverlayFS呈現其中一個所產生的對象(如果有),“上層”文件系統優先。OverlayFS與其他覆蓋型文件系統不同,OverlayFS合并的目錄子樹不一定是來自不同的文件系統。”
看到這應該明白了,是為了讓lower層的vendor等分區仍然為read-only只讀,但是又有一個對應的upper層可讀可寫,兩層不同的文件則放入到work層。
舉個例子,當adb remount重啟設備后,往vendor分區push內容,這時會在其upper層對應創建相同文件名的文件出來,如果修改此文件名的文件,則會優先修改upper層的數據。
overlay后,能看到vendor有三層了,lowerdir、upperdir、workdir
google在android項目上引入overlayfs就很巧妙了,如果沒有這個overlayfs,adb remount后vendor分區本身就需要修改為rw可讀可寫了,而有了overlayfs,vendor分區還是ro只讀的,原始數據不用修改。
/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執行overlayfs動作的地方在fs_mgr_remount.cpp的do_remount函數,感興趣的可以繼續跟蹤一下如下代碼的詳細實現。
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;}總結
以上是生活随笔為你收集整理的adb remount overlayfs的说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html 12306页面实现,jQuer
- 下一篇: Google Maps API编程资源大