ѸάÍø

²é¿´: 1183|»Ø¸´: 0
´òÓ¡ ÉÏÒ»Ö÷Ìâ ÏÂÒ»Ö÷Ìâ
[άÐÞ»ù´¡]

Android ¶¯Ì¬·ÖÇøÏê½â(Æß) overlayfs Óë adb remount ²Ù×÷

  [¸´ÖÆÁ´½Ó]
Í·Ïñ±»ÆÁ±Î
Ìøתµ½Ö¸¶¨Â¥²ã
1#
·¢±íÓÚ 2023-3-30 09:25:07 | Ö»¿´¸Ã×÷Õß »ØÌû½±Àø |µ¹Ðòä¯ÀÀ |ÔĶÁģʽ À´×Ô£º ºþÄÏ À´×Ô ºþÄÏ

ÂíÉÏ×¢²á£¬»ñÈ¡ÔĶÁ¾«»ªÄÚÈݼ°ÏÂÔØȨÏÞ

ÄúÐèÒª µÇ¼ ²Å¿ÉÒÔÏÂÔØ»ò²é¿´£¬Ã»ÓÐÕʺţ¿×¢²á

x
0. µ¼¶Á
×ʼѧϰ Android ¶¯Ì¬·ÖÇøÔ´ÂëµÄʱºò£¬±È½Ï´úÂë·¢ÏÖ system/core/fs_mgr Ŀ¼Ï¶àÁËÒ»¸öÃûΪ fs_mgr_overlayfs.cpp µÄÎļþ£¬Ò»Ö±²»ÖªµÀʲôʱºò»áÓõ½ overlayfs¡£
ºóÀ´ÔÚ Android ¹Ù·½ÎĵµÖÐÒ²Ìáµ½ overlayfs ÓÃÓÚ adb remount ²Ù×÷£¬µ«Ã»ÓÐÖØÊÓ¡£
×Ü´òËãµÈϵͳѧϰ overlayfs ÒÔºóÔÙ·¢Ò»Æª³¤ÎÄ£¬²»¹ýÒ»Ö±ÔÚ"´òËã"½×¶Î¡£
×î½üÍ»·¢ÆæÏ룬ÔÚ OTA ÌÖÂÛȺÀïËÑË÷һϠremount Ïà¹ØµÄÁÄÌì¼Ç¼£¬Õâ¸öÎÊÌâÒýÆðµÄ»°ÌâʵÔÚÊÇÌ«¶àÁË£¬ËùÒÔÊÇʱºò¾õµÃÓбØÒªÏêϸ˵Ã÷ overlay ºÍ remount Õâ¸öÎÊÌâÁË¡£
±¾ÎÄ´Ó overlay ÎļþϵͳµÄ»ù±¾Ô­Àí³ö·¢£¬¼òµ¥½éÉÜÁË Linux ºÍ Android ϵͳÖÐµÄ overlay  Îļþϵͳ¼°Ïà¹ØÄÚÈÝ£¬ÖصãÔÚ Android ÖÐµÄ remount ²Ù×÷»á´Ó super É豸»ò data ·ÖÇø·ÖÅä¿Õ¼äÓÃÓÚ overlay  Îļþϵͳ¡£
ËùÒÔÎÄÕÂÄÚÈݺܳ¤£¬Èç¹ûÖ»¶Ô½áÂÛ¸ÐÐËȤ£¬ÇëÖ±½ÓÌøתµ½µÚ 6 ½Ú£¬×ܽá²é¿´±¾ÎÄÌáµ½µÄһЩ²Ù×÷ºÍ½áÂÛ¡£
×îºóÒ²ÌṩÁËÒâ˼˼¿¼Ì⣬Èç¹ûÄãÄÜÇëÇåÎúµÄ»Ø´ðÕâЩÎÊÌ⣬ÎÒÏàÐÅÄãÒѾ­¶Ô overlay »ò remount ÒѾ­ÓÐÁ˱ȽÏÇåÎúµÄÈÏʶ¡£
±¾ÎÄ×÷Ϊ¶¯Ì¬·ÖÇøϵÁеĵÚÆßƪ£¬Êµ¼ÊÉÏÔÚ¶¯Ì¬·ÖÇøÒÔºóµÄÐéÄâ A/B ÉÏÒ²ÊÊÓá£
¶¯Ì¬·ÖÇøϵÁÐÇ°Áùƪ°üÀ¨£º
Èç¹ûÄúÒѾ­¶©ÔÄÁ˱¾×¨À¸£¬ÇëÎñ±Ø¼ÓÎÒ΢ÐÅ£¬À­Äã½ø¡°¶¯Ì¬·ÖÇø & ÐéÄâ·ÖÇøרÀ¸ VIP ´ðÒÉȺ¡±¡£
1. ʲôÊÇ overlayfs?
OverlayfsÊÇÒ»ÖÖÀàËÆ aufs (advanced multi-layered unification filesystem)  µÄÒ»ÖֶѵþÎļþϵͳ, ÓÚ 2014 ÄêÕýʽºÏÈëLinux-3.18Ö÷ÏßÄÚºË, Ä¿Ç°Æ书ÄÜÒѾ­»ù±¾Îȶ¨(ËäÈ»»¹´æÔÚһЩÌØÐÔÉÐδʵÏÖ)ÇÒ±»Öð½¥Íƹã, ÌرðÔÚÈÝÆ÷¼¼ÊõÖиüÊÇÊÆÍ·Äѵ²¡£
Overlayfs ÒÀÀµ²¢½¨Á¢ÔÚÆäËüµÄÎļþϵͳ֮ÉÏ(ÀýÈç ext4fs ºÍ xfs  µÈµÈ)£¬²¢²»Ö±½Ó²ÎÓë´ÅÅÌ¿Õ¼ä½á¹¹µÄ»®·Ö£¬½ö½ö½«Ô­À´µ×²ãÎļþϵͳÖв»Í¬µÄĿ¼½øÐС°ºÏ²¢¡±£¬È»ºóÏòÓû§³ÊÏÖ¡£Òò´Ë¶ÔÓÚÓû§À´Ëµ£¬ËüËù¼ûµ½µÄoverlayÎļþϵͳ¸ùĿ¼ÏµÄÄÚÈݾÍÀ´×Ô¹ÒÔØʱËùÖ¸¶¨µÄ²»Í¬Ä¿Â¼µÄ¡°ºÏ¼¯¡±¡£Èçͼ 1¡£
ͼ1. Overlayfs »ù±¾½á¹¹
ÉÏͼÖÐ Lower Dir A / Lower Dir B Ŀ¼ºÍ Upper Dir Ŀ¼ΪÀ´×ԵײãÎļþϵͳµÄ²»Í¬Ä¿Â¼£¬Óû§¿ÉÒÔ×ÔÐÐÖ¸¶¨, ÄÚ²¿°üº¬ÁËÓû§ÏëÒªºÏ²¢µÄÎļþºÍĿ¼¡£Merge Dir Ŀ¼Ϊ¹ÒÔص㡣
µ±Îļþϵͳ¹ÒÔغó£¬ÔÚ merge Ŀ¼Ï½«»áͬʱ¿´µ½À´×Ô¸÷ lower ºÍ upper  Ä¿Â¼ÏµÄÄÚÈÝ£¬²¢ÇÒÓû§Ò²ÎÞ·¨£¨ÎÞÐ裩¸ÐÖªÕâЩÎļþ·Ö±ðÄÄЩÀ´×Ô Lower Dir£¬ÄÄЩÀ´×Ô Upper  Dir£¬Óû§¿´¼ûµÄÖ»ÊÇÒ»¸öÆÕͨµÄÎļþϵͳ¸ùĿ¼¶øÒÑ£¨Lower Dir ¿ÉÒÔÓжà¸öÒ²¿ÉÒÔÖ»ÓÐÒ»¸ö£©¡£
ËäÈ» overlayfs ½«²»Í¬µÄ¸÷²ãĿ¼½øÐкϲ¢£¬µ«ÊÇ Upper Dir ºÍ¸÷ Lower Dir  Õ⼸¸ö²»Í¬µÄĿ¼²¢²»ÍêÈ«µÈ¼Û£¬´æÔÚ²ã´Î¹Øϵ¡£Ê×Ïȵ± Upper Dir ºÍ Lower Dir Á½¸öĿ¼´æÔÚͬÃûÎļþʱ£¬Lower Dir  µÄÎļþ½«»á±»Òþ²Ø£¬Óû§Ö»ÄÜ¿´¼ûÀ´×Ô Upper Dir µÄÎļþ£¬È»ºó¸÷¸ö Lower Dir Ò²´æÔÚÏàͬµÄ²ã´Î¹Øϵ£¬½ÏÉϲãÆÁ±Î½ÐϲãµÄͬÃûÎļþ¡£
³ý´ËÖ®Í⣬Èç¹û´æÔÚͬÃûµÄĿ¼£¬ÄǾͼÌÐøºÏ²¢(Lower Dir ºÍ Upper Dir ºÏ²¢µ½¹ÒÔصãĿ¼Æäʵ¾ÍÊǺϲ¢Ò»¸öµäÐ͵ÄÀý×Ó£©¡£
¸÷²ãĿ¼ÖÐµÄ Upper Dir ÊǿɶÁдµÄĿ¼£¬µ±Óû§Í¨¹ý Merge Dir ÏòÆäÖÐÒ»¸öÀ´×Ô Upper Dir  µÄÎļþдÈëÊý¾Ýʱ£¬ÄÇÊý¾Ý½«Ö±½ÓдÈëUpper DirÏÂÔ­À´µÄÎļþÖУ¬É¾³ýÎļþÒ²ÊÇͬÀí£»¶ø¸÷ Lower Dir ÔòÊÇÖ»¶ÁµÄ£¬ÔÚ  overlayfs ¹ÒÔغóÎÞÂÛÈçºÎ²Ù×÷ merge Ŀ¼ÖжÔÓ¦À´×Ô Lower Dir µÄÎļþ»òĿ¼£¬Lower Dir  ÖеÄÄÚÈݾù²»»á·¢ÉúÈκεĸı䣨ÀíÂÛÉè¼ÆÈç´Ë£¬µ«Êµ¼ÊÔÚһЩ¼«¶Ë³¡¾°´æÔÚÆ«²î£¬ºóÃæÎÒ»áÏêϸ½éÉÜ£©¡£
¼ÈÈ» Lower Dir ÊÇÖ»¶ÁµÄ£¬Äǵ±Óû§ÏëÒªÍùÀ´×Ô lower ²ãµÄÎļþÌí¼Ó»òÐÞ¸ÄÄÚÈÝʱ£¬overlayfs  Ê×ÏÈ»áµÄ¿½±´Ò»·ÝLower Dir ÖеÄÎļþ¸±±¾µ½ Upper Dir ÖУ¬ºóÐøµÄдÈëºÍÐ޸IJÙ×÷½«»áÔÚ Upper Dir Ï嵀 copy-up µÄ¸±±¾ÎļþÖнøÐУ¬Lower Dir Ô­Îļþ±»Òþ²Ø¡£
ÒÔÉϾÍÊÇ overlayfs ×î»ù±¾µÄÌØÐÔ£¬¼òµ¥µÄ×ܽáΪÒÔÏÂ3µã£º
  • ÉÏϲãͬÃûĿ¼ºÏ²¢£»
  • ÉÏϲãͬÃûÎļþ¸²¸Ç£»
  • Lower DirÎļþдʱ¿½±´¡£

ÕâÈýµã¶ÔÓû§¶¼ÊDz»¸ÐÖªµÄ¡£
×ÛºÏÀ´Ëµ£¬overlayfs ÊÇÒ»ÖֶѵþµÄÎļþϵͳ£¬¿ÉÒÔÓÃÒ»¸öĿ¼µÄÄÚÈݵþ¼Óµ½ÁíÍâÒ»¸öĿ¼֮ÉÏ¡£ÌرðÊʺÏÒÔϳ¡¾°£º
  • ¶àÈ˶Ôͬһ¸öĿ¼½øÐжÀÁ¢µÄ·ÃÎÊ£¬µ«ÓÖ²»Ï£ÍûÐ޸Ĺ«¹²Ä¿Â¼ÄÚÈݵÄÇé¿ö£¬´ËʱֻÐèÒª½«¸öÈ˵ÄĿ¼µþ¼Óµ½¹«¹²µÄĿ¼Éϼ´¿É¡£ËùÓÐδ¸Ä¶¯µÄÄÚÈÝÀ´×Ô¹«¹²Ä¿Â¼£¬ËùÓиĶ¯¹ýµÄÊý¾Ý¶¼±£´æÔÚ¸öÈËĿ¼ÖС£
    ±ÈÈ磬ϵͳÖеĶà¸ö docker ¾ÍÊôÓÚÕâÖÖÇéÐΣ¬Ã¿¸ö docker ¿´ÆðÀ´¶¼ÊÇÒ»¸ö¶ÀÁ¢µÄ»·¾³£¬Í¨¹ýʹÓà overlayfs£¬¶àÈ˹²Ïí¹«¹²µÄÊý¾Ý£¬¿ÉÒÔ¼«´óµÄ¼õÉÙ¶Ô´æ´¢¿Õ¼äµÄÕ¼Óá£
  • ¶ÔÖ»¶ÁÎļþϵͳ½øÐÐÐ޸ġ£
    ±ÈÈç Android µ÷ÊÔʱ£¬ÁÙʱ¸Ä¶¯ system ·ÖÇøÑéÖ¤ÎÊÌ⣬ֻÐèÒªÔÚÖ»¶ÁµÄ /system Ŀ¼Éϵþ¼ÓÒ»¸ö¿É¶ÁдµÄ overlayfs£¬ËùÓÐ system ¸Ä¶¯¶¼±£´æµ½ overlayfs µÄ¿Õ¼äÖС£

2. Linux Çý¶¯ÖÐµÄ overlayfs
Linux ÏÂ overlayfs:
  • ´úÂëλÓÚ fs/overlayfs Ŀ¼£¬
  • ÎĵµÎ»ÓÚ Documentation/filesystems/overlayfs.txt

Linux ±àÒë overlayfs µÄ¿ª¹Ø:
ͼ 2. Linux ÖÐ overlayfs µÄ±àÒ뿪¹Ø
ÔÚ linux ÏÂÃæ¿ÉÒÔͨ¹ý /proc/filesystems ²é¿´ÏµÍ³Ö§³ÖµÄÎļþϵͳ:
console:/ # cat /proc/filesystems                                              nodev   sysfsnodev   tmpfsnodev   bdevnodev   procnodev   cgroupnodev   cgroup2nodev   devtmpfsnodev   configfsnodev   debugfsnodev   tracefsnodev   sockfsnodev   bpfnodev   pipefsnodev   ramfsnodev   devpts        ext3        ext2        ext4        cramfs        squashfs        vfat        msdos        iso9660nodev   jffs2        fuseblknodev   fusenodev   fusectlnodev   overlaynodev   incremental-fs        udf        f2fsnodev   mqueuenodev   selinuxfsnodev   bindernodev   ubifsnodev   pstorenodev   functionfsconsole:/ #123456789101112131415161718192021222324252627282930313233343536373839
ÉÏÃæÊÇÔÚÒ»¸ö Android ºÐ×ÓÉÏͨ¹ýÃüÁî cat /proc/filesystems ²é¿´Ö§³ÖµÄÎļþϵͳÇé¿ö¡£
µÚÒ»ÁÐÏÔʾÊÇ·ñÒѾ­ÓÐÉ豸¹ÒÔØÁ˸ÃÎļþϵͳ£¬¡°nodev¡± ±íʾ»¹Ã»ÓÐÉ豸¹ÒÔØ¡£
µÚ¶þÁÐÏÔʾÎļþϵͳµÄÃû³Æ¡£
ÕâÀï¿ÉÒÔ¿´µ½£¬Õâ¸öÉ豸֧³Ö overlay£¬µ«ÊÇûÓÐÉ豸¹ÒÔØ¡£
3. Android ϵͳµÄ overlayfs
Android µÄϵͳ·ÖÇø£¬°üÀ¨ system ºÍ vendor ÔÚÔËÐÐʱ¶¼ÊÇÒÔÖ»¶ÁµÄ·½Ê½¹ÒÔصģ¬µ«ÔÚ¿ª·¢Öг£³£ÓÖÐèÒªÐÞ¸Ä system »ò vendor Ŀ¼¡£
Òò´Ë£¬Android ÔÚ¶¯Ì¬·ÖÇø°æ±¾ÖÐÒýÈëÁË overlayfs£¬ÒÔÏÂÊǹٷ½Îĵµ¶ÔÕâ¸ö¸Ä¶¯µÄ½éÉÜ:
ͼ 3. Android ¹Ù·½½éÉÜ overlayfs ÓÃÓÚ adb remount ²Ù×÷
ÉÏÃæÕâ¸ö½ØͼÀ´×Ô Android ¹Ù·½Îĵµ¡¶ÊµÏÖ¶¯Ì¬·ÖÇø¡·¡£
Android ϵͳµÄ overlayfs »ùÓÚ linux µ×²ãÇý¶¯½øÐÐÁËÀ©Õ¹£¬ÆäʵÏÖ´úÂëλÓÚ£º
system/core/fs_mgr/fs_mgr_overlayfs.cpp1
µ± adb ·¢ËÍ remount ÃüÁîʱ£¬ÏµÍ³»áµ÷ÓÃÃüÁîÐй¤¾ß /system/bin/remount À´Ö´ÐоßÌåµÄ remount ²Ù×÷¡£Õâ¸ö¹¤¾ßÓÉÎļþ system/core/fs_mgr/fs_mgr_remount.cpp ±àÒë¶ø³É£¬ÔÚÖ´ÐоßÌå¹ÒÔزÙ×÷µÄ do_remount º¯ÊýÖд´½¨ overlayfs Îļþϵͳ·ÖÇø²¢¹ÒÔÚµ½ /mnt/scratch Ŀ¼Ï¡£
Ìرð×¢ÒâµÄÊÇ remount Ö»ÓÐÔÚÒÔÏÂÌõ¼þϲÅÄܲÙ×÷:
  • userdebug build »òÕß eng build °æ±¾( user build °æ±¾²»ÐÐ)
  • dmverity ´¦ÓÚ disable ״̬

¸ü¶à¹ØÓÚ Android Ï overlayfs µÄÐÅÏ¢Çë²Î¿¼ fs_mgrĿ¼Ï嵀 overlayfs ×ÔÊöÎÄ£¬Â·¾¶Î»ÓÚ:
system/core/fs_mgr/README.overlayfs.md1
Èç¹ûÒ»¿ªÊ¼¶Á²»¶®Õâ¸öÎĵµ£¬½¨Òé¶à¶Á¼¸±é¡£
ÔÚ Android Q(10) ¼°ºóÐø°æ±¾ÉÏ£¬
  • ¶ÔÓÚÖ§³Ö A/B ϵͳµÄÉ豸£¬¹ÒÔصãλÓÚ: /mnt/scratch/overlay
  • ¶ÔÓÚ·Ç A/B ϵͳÉ豸£¬¹ÒÔصãλÓÚ: /cache/overlay

´Ó´úÂëÖпɼû£¬overlayfs Éú³ÉµÄ·ÖÇø»áдÈë super ·ÖÇøÍ·²¿µÄ metadata ÇøÓòÖС£¸ÃÇøÓò´æ´¢µÄÊÇ super  ·ÖÇøµÄ·ÖÇø±í£¬ÕâÒ²¾ÍÒâζ×ÅËù´´½¨µÄ overlayfs Êdz־õģ¬ÏµÍ³ÖØÆôÒÔºóÈÔÈ»´æÔÚ£¬Ö±µ½½« overlayfs ÎļþϵͳËùÔÚ·ÖÇø´Ó  metadata ÖÐÇå³ý¡£
4. overlayfs Ïà¹Ø²Ù×÷
ÕâÀï²»ÔÙÏêϸ·ÖÎö Android overlayfs µÄÔ´Â룬Ö÷ÒªÌṩһЩ²Ù×÷ overlayfs ²Ù×÷ÑÝʾ˵Ã÷¡£
1. Linux ÉÏ overlayfs µÄÑÝʾ²Ù×÷
Linux Ͻ«¶à¸öĿ¼¹ÒÔØΪ overlayfs µÄÃüÁîΪ:
mount -t overlay overlay -o lowerdir=lowerdir,upperdir=upperdir,workdir=workdir mountpoint1
Èç¹û lowerdir Óжà¸ö£¬Ã¿¸öÖ®¼äʹÓÃðºÅ(·Ö¸ô¡£
¶ÔÓÚ overlay Ïà¹ØµÄ²ÎÊý£¬ÔÚ mount µÄ man ÊÖ²áÖÐÊÇÕâô˵µÄ:
ͼ 4. mount ÃüÁîÖйØÓÚ overlay ÎļþϵͳµÄÑ¡Ïî²ÎÊý
¶ÔÓÚÕâÀïµÄ lowerdir, upperdir, workdir ·Ö±ð±íʾ£º
lowerdir=directory       Any filesystem, does not need to be on a writable filesystem.​upperdir=directory       The upperdir is normally on a writable filesystem.​workdir=directory       The workdir needs to be an empty directory on the same filesystem as upperdir.12345678
¼ò¶øÑÔÖ®£¬
  • lowerdir Êǵײ㱻¸²¸ÇµÄ»ù±¾Ä¿Â¼£¬¹ÒÔغóÕâ¸öĿ¼µÄÄÚÈݻᱻ upper Ŀ¼µÄÄÚÈݸ²¸Ç
  • upperdir ÊÇÉϲãĿ¼£¬¶Ô¶ÑµþÒÔºóĿ¼µÄдÈë»á±£´æÔÚ upper Ŀ¼ÖÐ
  • workdir ÊÇÓÃÓÚ¸÷ÖÖ´¦Àí¹¤×÷µÄĿ¼£¬¶ÔÓû§Í¸Ã÷£¬Óû§Ò²²»ÐèÒª¹ØÐÄ
  • mountpoint ÊÇ×îÖÕ lowerdir ºÍ upperdir ºÏ²¢ºóµÄ¹ÒÔصã

ÔÚ ¡¶ÉîÈëÀí½âoverlayfs£¨¶þ£©£ºÊ¹ÓÃÓëÔ­Àí·ÖÎö¡· ÌṩÁËÒ»¸ö·Ç³£ºÃµÄÀý×Ó£¬×ªÔØÈçÏÂ:
$ mkdir -p lower{1,2}/dir upper/dir worker merge$ touch lower1/foo1 lower2/foo2 upper/foo3$ touch lower1/dir/{aa,bb} lower2/dir/aa upper/dir/bb$ echo "from lower1" > lower1/dir/aa $ echo "from lower2" > lower2/dir/aa $ echo "from lower1" > lower1/dir/bb$ echo "from upper" > upper/dir/bb $ sudo mount -t overlay overlay -o lowerdir=lower1:lower2,upperdir=upper,workdir=worker merge$ tree mergemerge©À©¤©¤ dir©¦   ©À©¤©¤ aa©¦   ©¸©¤©¤ bb©À©¤©¤ foo1©À©¤©¤ foo2©¸©¤©¤ foo3​1 directory, 5 files$ cat merge/dir/aa from lower1$ cat merge/dir/bb from upper12345678910111213141516171819202122
ÏÂÃæÊǽ«ÊµÑéÖн«Ä¿Â¼ lower1, lower2 ºÍ upper ½øÐеþ¼Ó²Ù×÷µ½ merge Ŀ¼µÄʾÒâͼ¡£
ͼ5. overlayfs»ù±¾¹ÒÔØʾÀý
¸ü¶àʵÑ飬½¨Òéתµ½ ¡¶ÉîÈëÀí½âoverlayfs£¨¶þ£©£ºÊ¹ÓÃÓëÔ­Àí·ÖÎö¡· ½øÐÐÏêϸѧϰ¡£
Ò²ÔٴθÐл²©Ö÷ luckyapple1028 Éè¼ÆµÄ²Ù×÷ʾÀý¡£
2. Android É쵀 overlayfs ÑÝʾ²Ù×÷
ÔÚ Android ÉÏÖ´ÐÐ remount ²Ù×÷ʱ£¬ÏµÍ³×Ô¶¯Îª system, vendor µÈÖ»¶Á·ÖÇø´´½¨ overlayfs ÎļþϵͳµÄ¹ÒÔص㡣
¹Ø±Õ dm-verity, Ö´ÐÐ remount
°´ÕÕ overlayfs ×ÔÊöÎĵµµÄ˵·¨£¬¿ÉÒÔʹÓÃÒÔÏÂÖ¸Áî˳ÐòÖ´ÐÐ remount ²Ù×÷:
$ adb root$ adb disable-verity$ adb reboot$ adb wait-for-device$ adb root$ adb remount123456
È»ºóÖ´ÐÐÒÔϲ½Öèºó£¬ÏµÍ³×Ô¶¯ÎªËùÓзÖÇø´´½¨ overlayfs ¹ÒÔØ:
$ adb shell stop$ adb sync$ adb shell start$ adb reboot1234
ÒÔϲ½ÖèÍùÖ¸¶¨·ÖÇøÍÆËÍÄÚÈÝ£¬Ö»´´½¨ÏàÓ¦·ÖÇøµÄ overlayfs:
$ adb push  $ adb reboot12
ÎĵµÖÐÒ²Ìáµ½£¬¶ÔÓÚÉÏÃæµÄÖ¸Áî
$ adb disable-verity$ adb reboot12
ºÍ
$ adb remount1
¶¼¿ÉÒÔÓÃÒ»ÌõÖ¸ÁîÀ´Ìæ´ú:
$ adb remount -R1
ÉÏÃæÒ»´ó´®Ö¸Áî¿´ÆðÀ´ºÜ·±Ëö£¬Êµ¼Ê²Ù×÷ÖпÉÒÔ¼òµ¥Ê¹ÓÃÒÔÏÂÖ¸Áî½øÐÐ remount:
$ adb root$ adb disable-verity$ adb remount$ adb reboot1234
ÔÚ disable-verity ÒÔºó¿ÉÒÔͨ¹ýÃüÁî getprop | grep verity ²é¿´µ±Ç°µÄ verity ״̬:
$ adb shell getprop | grep verity[ro.boot.veritymode]: [disabled]12
¿ÉÒÔͨ¹ýÖ´ÐÐ mount | grep overlay ²é¿´ overlayfs µÄ¹ÒÔØÇé¿ö£¬ÒÔÏÂÊÇÔÚÒ»¸ö Android R µÄÉ豸ÉÏÖ´ÐÐ remount ÒÔºóµÃµ½µÄÊä³ö:
$ adb shell mount | grep overlayoverlay on /system type overlay (ro,seclabel,noatime,lowerdir=/system,upperdir=/mnt/scratch/overlay/system/upper,workdir=/mnt/scratch/overlay/system/work,override_creds=off)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)...1234
´ÓÉÏÃæµÄÊä³öÖпÉÒÔ¿´µ½£¬´Ëʱ /system ºÍ /vendor ¶¼ÒѾ­Í¨¹ý overlay µÄ·½Ê½ÖØйÒÔØÁË£¬ÆäÐ޸ĵÄÄÚÈÝ»á´æ·ÅÔÚ upperdir Ŀ¼(/mnt/scratch/overlay)ÖС£
´ò¿ª dm-verity, Ö´ÐÐ unmount
ÔÚ remount ÒԺ󣬿ÉÒÔͨ¹ý adb enable-verity À´Ð¶ÔØ overlay µÄÎļþϵͳ£¬²¢ÖØдò¿ª verity ״̬¡£
$ adb root$ adb enable-verity$ adb reboot123
ÒÔÏÂÊÇÔÚ¹Ø±Õ verity µÄ״̬ÏÂÖØдò¿ª verity ²¢Ö´Ðи÷ÖÖ¼ì²éµÄ²Ù×÷¼Ç¼:
$ adb rootrestarting adbd as root# µ±Ç° dm-verity ´¦ÓÚ disable ״̬$ adb shell getprop | grep verity[ro.boot.veritymode]: [disabled]# ÖØдò¿ª dm-verity$ adb enable-veritydisabling overlayfsSuccessfully enabled verityNow reboot your device for settings to take effect# ÖØÆôϵͳÈà dm-verity ´ò¿ªÉúЧ$ adb reboot$ adb rootrestarting adbd as root# µ±Ç° dm-verity ´¦ÓÚ enforcing ״̬$ adb shell getprop | grep verity[ro.boot.veritymode]: [enforcing]# ¼ì²éÒѾ­¹ÒÔÚµÄ overlay Îļþϵͳ£¬Ã»ÓÐÊä³ö˵Ã÷ÒѾ­Ã»ÓйÒÔØÈκΠoverlay ÎļþϵͳÁË$ adb shell mount | grep overlay12345678910111213141516171819202122232425overlay ÎļþϵͳµÄ¿Õ¼ä
¼øÓÚƪ·ùµÄ¹Øϵ£¬²»¾Í²»ÔÙ³¤ÆªÀÛë¹·ÖÎö overlay ÎļþϵͳµÄ¿Õ¼äÀ´Ô´ÁË¡£
  • ÔÚ Android Q(10) ¶¯Ì¬·ÖÇøÉÏ£¬µ±´ò¿ª verity ʱ£¬Ä¬ÈÏ»á´Ó super ·ÖÅä¿Õ¼äÓÃÓÚ¹ÒÔØ  overlay Îļþϵͳ£¬ÏàÓ¦µÄ scratch ·ÖÇøÐÅϢдÈëµ½ super É豸ͷ²¿ metadata µÄ·ÖÇø±íÖУ¬¿ÉÒÔʹÓà lpdump  ¹¤¾ß²é¿´¡£
  • ÔÚ Android R(11) ¼°ºóÐø°æ±¾´ò¿ªÁË Virtual A/B ÒÔºó£¬Ä¬ÈÏ»áÏÈ´Ó data ·ÖÅä¿Õ¼äÓÃÓÚ¹ÒÔØ overlay Îļþϵͳ£¬°üº¬ scratch ·ÖÇøµÄ metadata Êý¾Ý»áдÈëµ½Îļþ:
    /metadata/gsi/remount/lp_metadata1
5. Android ÖÐ overlayfs Ïà¹ØµÄÎÊÌâ
ż¶û»áÓÐС»ï°é»áÔÚȺÀïÎÊһЩ OTA Éý¼¶ÖпռäÒì³£µÄÎÊÌ⣬ÕâÀàÎÊÌâ³ýÁ˹滮ʱ¿Õ¼äȷʵ²»¹»Ö®Í⣬ºÜ¿ÉÄÜÒòΪÆôÓÃÁË overlay ÎļþϵͳÔÚ super »ò data ·ÖÇøÉÏ·ÖÅäÊý¾Ý£¬µ¼ÖÂÉý¼¶Ê±¿Õ¼ä²»¹»ÁË¡£
ÕâÀïÎÒ×ܽáÒ»ÏÂÍøÉϹØÓÚÕâÀàÎÊÌâµÄÎÄÕ¡£
1. MTK ƽ̨, adb remountÖ®ºó£¬OTA Éý¼¶Ê§°Ü 473   473 I update_engine: [1101/114216.247577:INFO:dynamic_partition_control_android.cc(197)] Loaded metadata from slot A in /dev/block/platform/bootdevice/by-name/super 473   473 I update_engine: [1101/114216.247946:INFO:boot_control_android.cc(312)] Removing group main_b 473   473 I update_engine: [1101/114216.248105:INFO:boot_control_android.cc(343)] Added group main_b with size 1844969472 473   473 I /system/bin/update_engine: [liblp]Partition vendor_b will resize from 0 bytes to 327540736 bytes 473   473 I update_engine: [1101/114216.248254:INFO:boot_control_android.cc(360)] Added partition vendor_b to group main_b with size 327540736 473   473 I /system/bin/update_engine: [liblp]Partition product_b will resize from 0 bytes to 252170240 bytes 473   473 I update_engine: [1101/114216.248382:INFO:boot_control_android.cc(360)] Added partition product_b to group main_b with size 252170240 473   473 E /system/bin/update_engine: [liblp]Not enough free space to expand partition: system_b 473   473 E update_engine: [1101/114216.248480:ERROR:boot_control_android.cc(356)] Cannot resize partition system_b to size 1154273280. Not enough space? 473   473 E update_engine: [1101/114216.248544:ERROR:delta_performer.cc(998)] Unable to initialize partition metadata for slot B 473   473 E update_engine: [1101/114216.248630:ERROR:download_action.cc(336)] Error ErrorCode::kInstallDeviceOpenError (7) in DeltaPerformer's Write method when processing the received payload -- Terminating processing 473   473 I update_engine: [1101/114216.249175:INFO:multi_range_http_fetcher.cc(177)] Received transfer terminated. 473   473 I update_engine: [1101/114216.249358:INFO:multi_range_http_fetcher.cc(129)] TransferEnded w/ code 200 473   473 I update_engine: [1101/114216.249451:INFO:multi_range_http_fetcher.cc(131)] Terminating.1236  1524 V FespxProcessor: onMultibfDataReceived: 8 index 0 size 4096 mPreUploadRollbackDataSize 131072 473   473 I update_engine: [1101/114216.253259:INFO:action_processor.cc(116)] ActionProcessor: finished DownloadAction with code ErrorCode::kInstallDeviceOpenError 473   473 I update_engine: [1101/114216.253452:INFO:action_processor.cc(121)] ActionProcessor: Aborting processing due to failure. 473   473 I update_engine: [1101/114216.253521:INFO:update_attempter_android.cc(454)] Processing Done. 473   473 I update_engine: [1101/114216.253568:INFO:dynamic_partition_control_android.cc(151)] Destroying [] from device mapper3254  3272 D clifeOTA: onStatusUpdate  status: 0 473   473 I update_engine: [1101/114216.254265:INFO:metrics_repo123456789101112131415161718192021
2. Android Q ÉÏ remount ·ÖÇø£¬µ¼Ö OTA Éý¼¶ super ·ÖÇø resize fail[liblp]Partition vendor will resize from 0 bytes to 217198592 bytes[liblp]Not enough free space to expand partition: systemFailed to resize partition system to size 1719984128.script aborted: assert failed: update_dynamic_partitions(package_extract_file("dynamic_partitions_op_list"))E:Error in @/cache/recovery/block.map (status 7)12345
6. ×ܽá1. ×ÛÊö
overlayfs ÊÇÒ»ÖֶѵþÎļþϵͳ£¬ÓÉ upperdir ºÍÖÁÉÙÒ»¸ö lowerdir ¹¹³É£¬¿´ÆðÀ´¾ÍºÃÏñÊÇ upperdir µþ¼ÓÔÚ lowerdir Ö®ÉÏ£¬ËùÓжԶѵþĿ¼µÄÐ޸Ķ¼»á±£´æµ½ upperdir ÖУ¬¶ø lowerdir ±£³Ö²»±ä¡£
ÊʺÏÒÔϳ¡¾°:
  • ¶àÈ˶Ôͬһ¸öĿ¼½øÐжÀÁ¢µÄ·ÃÎÊ£¬µ«ÓÖ²»Ï£ÍûÐ޸Ĺ«¹²Ä¿Â¼ÄÚÈݵÄÇé¿ö£¬´ËʱֻÐèÒª½«¸öÈ˵ÄĿ¼µþ¼Óµ½¹«¹²µÄĿ¼Éϼ´¿É¡£ËùÓÐδ¸Ä¶¯µÄÄÚÈÝÀ´×Ô¹«¹²Ä¿Â¼£¬ËùÓиĶ¯¹ýµÄÊý¾Ý¶¼±£´æÔÚ¸öÈËĿ¼ÖС£
  • ¶ÔÖ»¶ÁÎļþϵͳ½øÐÐÐ޸ġ£Android Æô¶¯ºó£¬Ä¬ÈÏ system ·ÖÇøÒÔÖ»¶Á·½Ê½¹ÒÔØ£¬µ÷ÊÔʱÐèÒªÁÙʱ¸Ä¶¯ system ·ÖÇøÑéÖ¤ÎÊÌ⣬ֻÐèÒªÔÚÖ»¶ÁµÄ /system  Ä¿Â¼Éϵþ¼ÓÒ»¸ö¿É¶ÁдµÄ overlayfs£¬ËùÓÐ system ¸Ä¶¯¶¼±£´æµ½ overlayfs µÄ¿Õ¼äÖС£

2. Linux ϵĹÒÔØÃüÁî
Linux Ͻ«¶à¸öĿ¼¹ÒÔØΪ overlayfs µÄÃüÁîΪ:
mount -t overlay overlay -o lowerdir=lowerdir,upperdir=upperdir,workdir=workdir mountpoint1
Èç¹û lowerdir Óжà¸ö£¬Ã¿¸öÖ®¼äʹÓÃðºÅ(·Ö¸ô¡£
3. Android overlayfs µÄ¹ÒÔغÍжÔØ
Android Ï¿ÉÒÔͨ¹ýÒÔÏÂÖ¸ÁîÖ´ÐÐ remout£¬´ïµ½¹Ø±Õ verity ²¢¹ÒÔØ overlay Îļþϵͳ£¬Ê¹ÄÜ¶Ô system, vendor µÈĿ¼Ð޸ĵÄÄ¿µÄ:
$ adb root$ adb disable-verity$ adb remount$ adb reboot1234
¿ÉÒÔͨ¹ýÒÔϲÙ×÷´ò¿ª verity£¬¹Ø±Õ remount£¬²¢Ð¶ÔØ overlay Îļþϵͳ£¬¶Ô system, vendor µÈĿ¼½øÐл¹Ô­:
$ adb root$ adb enable-verity$ adb reboot1234. Android overlayfs µÄ¹ÒÔصã
ÔÚ Android Q(10) ¼°ºóÐø°æ±¾ÉÏ£¬
  • ¶ÔÓÚÖ§³Ö A/B ϵͳµÄÉ豸£¬¹ÒÔصãλÓÚ: /mnt/scratch/overlay
  • ¶ÔÓÚ·Ç A/B ϵͳÉ豸£¬¹ÒÔصãλÓÚ: /cache/overlay

5. Android overlayfs ¿Õ¼äµÄÀ´Ô´
ÔÚ Android Q(10) ¶¯Ì¬·ÖÇøÉÏ£¬µ±´ò¿ª verity ʱ£¬Ä¬ÈÏ»á´Ó super ·ÖÅä¿Õ¼äÓÃÓÚ¹ÒÔØ overlay Îļþϵͳ£¬ÏàÓ¦µÄ·ÖÇøдÈëµ½ super É豸ͷ²¿ metadata µÄ·ÖÇø±íÖУ¬¿ÉÒÔʹÓà lpdump ¹¤¾ß²é¿´¡£
ÔÚ Android R(11) ¼°ºóÐø°æ±¾´ò¿ªÁË Virtual A/B ÒÔºó£¬Ä¬ÈÏ»áÏÈ´Ó data ·ÖÅä¿Õ¼äÓÃÓÚ¹ÒÔØ overlay Îļþϵͳ£¬·ÖÇøµÄ metadata Êý¾Ý»áдÈëµ½Îļþ:
/metadata/gsi/remount/lp_metadata16. ˼¿¼Ìâ
ÔÚ±¾ÎÄ¿ìÒª½áÊøµÄʱºò£¬»¹ÊÇÓ¦¸ÃÁôÏÂһЩ˼¿¼Ì⣺
  • Android ÔÚÖ´ÐÐ remount ¹ÒÔØ overlay Îļþϵͳ£¬ÒÔ¼°¹Ø±Õ overlay ÎļþϵͳʱִÐÐÁËÒ»´ó¶Ñ adb Ö¸ÁÄãÖªµÀÿһ¸öÖ¸Á±³ºó¶¼×öÁËʲô²Ù×÷Âð£¿
    °üÀ¨:

    • ¹Ø±Õ verity£¬Ö´ÐÐ remount

    $ adb root$ adb disable-verity$ adb reboot$ adb wait-for-device$ adb root$ adb remount123456

    • ÏÂÃæÕâÒ»×é²Ù×÷ÎÒҲû¸ã¶®µ½µ×¸ÉÁËÂ¸Ð¾õ²»×öÒ²¿ÉÒÔ£¬ÖªµÀµÄÂé·³µÄ¿ÆÆÕÏ¡£

  • $ adb shell stop$ adb sync$ adb shell start123

    • ´ò¿ª verity

    $ adb root$ adb enable-verity$ adb reboot123
  • ÔÚÉÏÃæµÄÕâЩ²Ù×÷ÖУ¬ÎªÊ²Ã´ÓÐʱºòÐèÒªÖ´ÐÐ adb reboot À´ÖØÆôÉ豸£¬²»ÖØÆô²»ÐÐÂð£¿
  • ÄãÖªµÀÈçºÎ²é¿´Ò»¸öϵͳµÄ verity£¬ÒÔ¼° overlay ÎļþϵͳµÄ¹ÒÔØÇé¿öÂð?(°üÀ¨´ÓÄÄÀï·ÖÅä¿Õ¼ä£¬¹ÒÔص½ÄÄÀÒÔ¼°¹ÒÔØʱʹÓÃÁËÄÄЩ²ÎÊý)

7. ²Î¿¼ÔĶÁ
±¾ÎijýÁË Android ×Ô´øµÄ overlayfs ×ÔÊöÎļþÍ⣬»¹²Î¿¼ÁËÒÔÏÂÎÄÕ£¬Ìرð¸Ðл
ÓÈÆäÉîÈëÀí½â overlayfs µÄÎÄÕ£¬Ð´µÃ·Ç³£ºÃ£¬¸É»õÂúÂú¡£
Èç¹ûÄúÒѾ­¶©ÔÄÁ˱¾×¨À¸£¬ÇëÎñ±Ø¼ÓÎÒ΢ÐÅ£¬À­Äã½ø¡°¶¯Ì¬·ÖÇø & ÐéÄâ·ÖÇøרÀ¸ VIP ´ðÒÉȺ¡±¡£
Èç¹ûÄú´ÓÊ Android OTA Éý¼¶Ïà¹Ø¹¤×÷»ò¶Ô OTA Éý¼¶¸ÐÐËȤ£¬»¶Ó­µ½ Android OTA ½»Á÷ȺһÆðÌÖÂÛ¡£
Èç¹û´ó¼ÒÓÐÈκÎÒÉÎÊ£¬ÓÖ»òÕß·¢ÏÖÃèÊöÓдíÎóµÄµØ·½£¬Ò²»¶Ó­¼ÓÎÒ΢ÐÅÌÖÂÛ£¬ÇëÔÚ¹«ÖÚºÅ(¡°ÂåÆæ¿´ÊÀ½ç¡±)ºǫ́»Ø¸´ ¡°wx¡± »ñÈ¡¶þάÂë¡£

ÄúÐèÒªµÇ¼ºó²Å¿ÉÒÔ»ØÌû µÇ¼ | ×¢²á

±¾°æ»ý·Ö¹æÔò

¹Ø±Õ

Õ¾³¤ÌáÐÑ ÉÏÒ»Ìõ /1 ÏÂÒ»Ìõ

¿ìËٻظ´ ·µ»Ø¶¥²¿ ·µ»ØÁбí
¸½½ü
µêÆÌ
΢ÐÅɨÂë²é¿´¸½½üµêÆÌ
άÐÞ
±¨¼Û
ɨÂë²é¿´ÊÖ»ú°æ±¨¼Û
ÐźÅÔª
¼þ²éѯ
µãλͼ


оƬËÑË÷

¿ìËٻظ´