UBports Robot Logo UBports Forum
    • 版块
    • 最新
    • 标签
    • 热门
    • 用户
    • 群组
    • 搜索
    • 注册
    • 登录

    Set partition sizes when flashing

    已定时 已固定 已锁定 已移动 OS
    partition sizesresizingroot partitionflashinginstalling
    42 帖子 15 发布者 14.6k 浏览 5 关注中
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
      回复
      • 在新帖中回复
      登录后回复
      此主题已被删除。只有拥有主题管理权限的用户可以查看。
      • H 离线
        haveaniceday
        最后由 编辑

        Dear community,

        the problem of the root partition (and other ones) being too small to install any software via apt is quite known. One can bind mount and use symlinks to counteract, but it would be much easier and presumably more stable to just install an image with adequate partition sizes.

        Do you know of a solution like setting the partition sizes when flashing a new image?

        Of course, this will probably break OTA updates, but that's okay. I'll just repeat the steps for each release.

        Kind regards and have a nice day ☺

        1 条回复 最后回复 回复 引用 0
        • D 离线
          doniks
          最后由 编辑

          I don't know the answers to your exact questions, but a related thought:

          On some devices the root filesystem is not written to the "system" partition, but to a "system.img" file on the "data" partition. My Nexus 7 is like this. That way it is quite easy to increase the space with resize2fs in recovery.

          I don't see a reason why an image file couldn't be used on other devices and I don't know how it is determined whether to use an image file or a partition, but I think this could be a route towards more space.

          L 1 条回复 最后回复 回复 引用 1
          • U 离线
            UniSuperBox
            最后由 编辑

            The image file can be resized, and I'm considering ways to make ubports-qa do this in case the user would prefer to use apt and turn off system-image upgrades. Of course we wouldn't be able to help people if they broke things in this state, but we can give them just enough rope to shoot themselves in the foot...

            D 1 条回复 最后回复 回复 引用 2
            • D 离线
              doniks @UniSuperBox
              最后由 编辑

              @unisuperbox are all devices equally footshootable? what I mean is, do we always install into an image or on some devices it goes into a partition?

              1 条回复 最后回复 回复 引用 0
              • U 离线
                UniSuperBox
                最后由 编辑

                No, actually...

                The devices which Canonical shipped have Ubuntu Touch installed on their /system partition. It is generally unsafe to resize this partition because Android devices are weird... More akin to a doomsday than stepping on a Lego

                The others (the Nexus 5, Oneplus One, and Fairphone 2) are installed to an image file which resides on /data/.

                D 1 条回复 最后回复 回复 引用 0
                • V 离线
                  vandys
                  最后由 编辑

                  FWIW, on the Nexus 5 I found it on /userdata/system.img
                  I'm very tempted to up-size the image file and see if I can get a bigger root!

                  1 条回复 最后回复 回复 引用 0
                  • D 离线
                    doniks @UniSuperBox
                    最后由 编辑

                    @unisuperbox assume someone has a device that currently installs into the partition. and assume they are sufficiently motivated and prepared to deal with the occasional footbullet. how would they go about installing their device with an image file?

                    1 条回复 最后回复 回复 引用 1
                    • H 离线
                      haveaniceday
                      最后由 编辑

                      @vandys I just did this on a M10 frieza an it worked like a charm.

                      sudo -s
                      dd if=/dev/null of=/userdata/ubuntu.img bs=1M seek=6000 count=0
                      resize2fs -f /userdata/ubuntu.img                                            
                      reboot
                      

                      How I understand it, it writes zero bytes in the image file after skipping 6GB. This leads to growth of the image file. Then resize2fs is used to grow the ext4 to the full extend of this file. The reboot is necessary to make the kernel aware about the changed filesystem.
                      Now, the root partition is big enough for all the apt goodness:

                      phablet@ubuntu-phablet:~$ ls -lash /userdata/ubuntu.img 
                      2.6G -rw------- 2 root root 5.9G Oct 18 09:34 /userdata/ubuntu.img
                      phablet@ubuntu-phablet:~$ df -h /
                      Filesystem      Size  Used Avail Use% Mounted on
                      /dev/loop0      5.8G  2.3G  3.3G  41% /
                      

                      Warning: could have bad consequences for your phone. Execute the commands without much interruption - especially if your root partition is already mounted rw. You don't want to corrupt your filesystem.

                      Have fun with it! 😉

                      V arubislanderA myiiM 3 条回复 最后回复 回复 引用 2
                      • V 离线
                        vandys @haveaniceday
                        最后由 编辑

                        @haveaniceday said in Set partition sizes when flashing:

                        @vandys I just did this on a M10 frieza an it worked like a charm.

                        "Fools rush in where angels fear to tread". Given your prompting, I did it too (ubuntu.img and
                        system.img appear to be two links to the same underlying inode) and... success. I now have
                        lots of room on my partition for any more packages. Very nice! So mark as a workable
                        technique on Nexus 5, too. Many thanks.

                        1 条回复 最后回复 回复 引用 0
                        • arubislanderA 离线
                          arubislander @haveaniceday
                          最后由 编辑

                          @haveaniceday
                          This worked for me too. Thanks for that.

                          What I can't seem to figure out though, is where the extra space is being deducted from. I had expected that the free space on /userdata would be reduced, but that doesn't seem to be the case. But this space must be coming at the expence of something, shouldn't it?

                          🇦🇼 🇳🇱 🇺🇸 🇪🇸
                          Happily running Ubuntu Touch
                          Google Pixel 3a (20.04 DEV)
                          JingPad (24.04 preview)
                          Meizu Pro 5 (16.04 DEV)

                          1 条回复 最后回复 回复 引用 0
                          • halucigeniaH 离线
                            halucigenia
                            最后由 编辑

                            I for one, as a user rather than a developer, think that the policy should be that things should be as un-footshootable as possible no matter how much rope that you might give us. 😉

                            Nexus4, Meizu MX4, Meizu Pro5, PinePhone UBPorts edition, PineTab, Pixel 3a XL

                            D 1 条回复 最后回复 回复 引用 0
                            • D 离线
                              doniks @halucigenia
                              最后由 编辑

                              @halucigenia not to worry. youll be able to sleep easy while youre staying away from commandline tools of which youre not sure what they do like ubports-qa 😉

                              1 条回复 最后回复 回复 引用 0
                              • myiiM 离线
                                myii @haveaniceday
                                最后由 编辑

                                @haveaniceday Fantastic, thank you very much for this. Another happy Nexus 5 user. After the first reboot, df -h / wasn't showing any change while the ls was. Ran the resize2fs -f /userdata/ubuntu.img again and rebooted a couple more times and finally succeeded. Just in case anyone else has similar issues when attempting this.

                                1 条回复 最后回复 回复 引用 0
                                • L 离线
                                  L-00117 已封禁 @doniks
                                  最后由 编辑

                                  此主題已被删除!
                                  1 条回复 最后回复 回复 引用 0
                                  • myiiM 离线
                                    myii
                                    最后由 编辑

                                    Apologies to all for the mass call-outs used in this post -- I wouldn't usually do this. I've encountered a situation where extending rootfs and all subsequent customisations are lost. I'm sharing this as a warning for those who have already resized, a caveat for those considering to do so, and as a discussion point for how to move forwards.

                                    Switching the release channel loses the extended rootfs

                                    With hindsight, there's nothing surprising about this since the process of switching channels replaces /userdata/ubuntu.img.

                                    @haveaniceday above:

                                    Of course, this will probably break OTA updates...

                                    @UniSuperBox above:

                                    The image file can be resized, and I'm considering ways to make ubports-qa do this in case the user would prefer to use apt and turn off system-image upgrades.

                                    I never had any issues with OTA updates, even after some fairly extensive hacking and customisations. Other than switching the channel, what other system-image upgrades could lead to this outcome?

                                    Moving forward

                                    @haveaniceday above:

                                    I'll just repeat the steps for each release.

                                    Essentially, this is all that can be done. But I managed to do some decent testing and found that this reconfiguration process can be made much easier. In my case, I made promising progress with SaltStack configuration management. Solutions involving tools such as this become viable once rootfs has been extended (in that the necessary packages can be installed). It wouldn't be too difficult to have a repo for collecting formulas that help automate this.

                                    @vandys @arubislander @doniks Since you all appear to have gone through the resizing process, I hope you don't mind me drawing your attention to this post.

                                    1 条回复 最后回复 回复 引用 1
                                    • myiiM 离线
                                      myii
                                      最后由 编辑

                                      One strange experience to share about extending rootfs after switching the release channel. Following the instructions above, using 6000 worked fine for the rc channel. However, after switching to the dev channel, I couldn't get this to work for that value, no matter how many times I resized and rebooted. I did manage to get other sizes to work, though. Ultimately, I settled for 6144 (6 * 1024) to get 6.0GB, i.e.:

                                      dd if=/dev/null of=/userdata/ubuntu.img bs=1M seek=6144 count=0
                                      
                                      1 条回复 最后回复 回复 引用 0
                                      • U 离线
                                        UniSuperBox
                                        最后由 UniSuperBox 编辑

                                        Most system-image upgrades are differential, where only the changes from one image to the next are downloaded and applied. So, any updates in upstream Ubuntu as well as our own packages are changed. If you run sudo apt dist-upgrade, you will already have these newer packages and won't see any changes when the upgrade happens. This could be seen as a bug or a feature depending on who you are. It's a bug in that an image may not be in a known good state after an upgrade.

                                        Upgrades which download a whole system image will always rewrite all of your changes. Full updates will happen in the following scenarios:

                                        • You specify a full upgrade to system-image (There's a way to do this, but I'm not sure how at this time)
                                        • The system-image-server does not have a diff from the image you are using to the new image (you've skipped a few updates, for example I went from devel 2018-12-21 to 2018-12-28 today and had to download the full image)
                                        • You are switching release channels

                                        This is why I said that ubports-qa should disable system-image updates. After you've changed your system image, it is no longer in a known good state and may behave in unexpected ways.

                                        myiiM 1 条回复 最后回复 回复 引用 1
                                        • myiiM 离线
                                          myii @UniSuperBox
                                          最后由 编辑

                                          @unisuperbox Fantastic, detailed explanation -- appreciate you taking the time to go through that.

                                          • The system-image-server does not have a diff from the image you are using to the new image (you've skipped a few updates, for example I went from devel 2018-12-21 to 2018-12-28 today and had to download the full image)

                                          This leaves me with some food for thought since it appears that I've increased my risk of this happening by switching to the dev channel.

                                          This is why I said that ubports-qa should disable system-image updates. After you've changed your system image, it is no longer in a known good state and may behave in unexpected ways.

                                          Is there a simple way of testing this out in the meantime?

                                          1 条回复 最后回复 回复 引用 0
                                          • K 离线
                                            KrisJace
                                            最后由 编辑

                                            I have been rad with the Nexus5 where rootfs is not constrained by a small physical partition size. I wish all devices could be converted to that layout.
                                            So far I enabled very easy resizing of rootfs via atuTools4UT: https://sourceforge.net/projects/all-things-ubuntu-library/files/releases/

                                            And the related portion in the sourcecode: https://sourceforge.net/p/all-things-ubuntu-library/code/HEAD/tree/trunk/ATUpackages/ATU/ATU-src/atulib.pas#l1329

                                            Currently working on a GUI for also resizing rootfs based on physical partition layout, ie. on Meizu PRO 5. Not sure if I will be able to do it on-device, but am still exploring this possibility, even using pivot chroot method.

                                            1 条回复 最后回复 回复 引用 3
                                            • R 离线
                                              rooty
                                              最后由 rooty 编辑

                                              Hi,

                                              Please help me, I'm confused...

                                              So I'm trying to increase my root, did following:

                                              dd if=/dev/null of=/userdata/ubuntu.img bs=1M seek=6144 count=0
                                              e2fsck -p /userdata/ubuntu.img
                                              resize2fs /userdata/ubuntu.img
                                              

                                              got this

                                              root@ubuntu-phablet:~# ls -lahi /userdata/
                                              total 3.9G
                                                    2 drwxrwx--x.  5 system      system           4.0K Jul  1 12:08 .
                                                    2 drwxr-xr-x  23 lxc-dnsmasq systemd-timesync 4.0K Apr 30 19:54 ..
                                              1310721 drwxrwx--x  23 system      system           4.0K Jul  1 13:21 android-data
                                                   22 -rw-r--r--   1 root        root                2 Oct 13  1970 .last_ubuntu-build
                                                   21 -rw-rw-rw-   1 root        root                0 Oct 13  1970 .last_update
                                                   13 -rw-------.  1 root        root                2 Jan  7  1970 .layout_version
                                                   11 -rw-------   1 root        root              32M Oct 13  1970 SWAP.img
                                               131073 drwxr-xr-x   5 root        root             4.0K Oct 13  1970 system-data
                                                   19 -rw-------   2 root        root             6.0G Oct 14  1970 system.img
                                                   19 -rw-------   2 root        root             6.0G Oct 14  1970 ubuntu.img
                                               655361 drwxr-xr-x   3 root        root             4.0K Oct 13  1970 user-data
                                              
                                              root@ubuntu-phablet:/userdata# parted ubuntu.img
                                              GNU Parted 3.2
                                              Using /userdata/ubuntu.img
                                              Welcome to GNU Parted! Type 'help' to view a list of commands.
                                              (parted) print
                                              Model:  (file)
                                              Disk /userdata/ubuntu.img: 6442MB
                                              Sector size (logical/physical): 512B/512B
                                              Partition Table: loop
                                              Disk Flags:
                                              
                                              Number  Start  End     Size    File system  Flags
                                               1      0.00B  6442MB  6442MB  ext2
                                              
                                              

                                              already did reboot couple times and still getting

                                              root@ubuntu-phablet:~# df -h /
                                              Filesystem      Size  Used Avail Use% Mounted on
                                              /dev/loop0      2.0G  1.8G   82M  96% /
                                              

                                              my specs:
                                              nexus 5
                                              Ubuntu 16.04.6 LTS

                                              p.s.
                                              All Things Ubuntu Library does not work for me

                                              root@ubuntu-phablet:~# ./ATU_arm-linux
                                              ./ATU_arm-linux: error while loading shared libraries: libgdk-x11-2.0.so.0: cannot open shared object file: No such file or directory
                                              root@ubuntu-phablet:~# ldd ./ATU_arm-linux
                                              	libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0xb6f01000)
                                              	libdl.so.2 => /lib/arm-linux-gnueabihf/libdl.so.2 (0xb6eee000)
                                              	libgdk-x11-2.0.so.0 => not found
                                              	libX11.so.6 => /usr/lib/arm-linux-gnueabihf/libX11.so.6 (0xb6dfd000)
                                              	libgdk_pixbuf-2.0.so.0 => /usr/lib/arm-linux-gnueabihf/libgdk_pixbuf-2.0.so.0 (0xb6dd4000)
                                              	libgtk-x11-2.0.so.0 => not found
                                              	libgobject-2.0.so.0 => /usr/lib/arm-linux-gnueabihf/libgobject-2.0.so.0 (0xb6d8b000)
                                              	libglib-2.0.so.0 => /lib/arm-linux-gnueabihf/libglib-2.0.so.0 (0xb6cb3000)
                                              	libgthread-2.0.so.0 => /usr/lib/arm-linux-gnueabihf/libgthread-2.0.so.0 (0xb6ca1000)
                                              	libgmodule-2.0.so.0 => /usr/lib/arm-linux-gnueabihf/libgmodule-2.0.so.0 (0xb6c8e000)
                                              	libpango-1.0.so.0 => /usr/lib/arm-linux-gnueabihf/libpango-1.0.so.0 (0xb6c48000)
                                              	libcairo.so.2 => /usr/lib/arm-linux-gnueabihf/libcairo.so.2 (0xb6b90000)
                                              	libatk-1.0.so.0 => /usr/lib/arm-linux-gnueabihf/libatk-1.0.so.0 (0xb6b69000)
                                              	libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6a7d000)
                                              	/lib/ld-linux-armhf.so.3 (0xb6f38000)
                                              	libxcb.so.1 => /usr/lib/arm-linux-gnueabihf/libxcb.so.1 (0xb6a59000)
                                              	libgio-2.0.so.0 => /usr/lib/arm-linux-gnueabihf/libgio-2.0.so.0 (0xb6956000)
                                              	libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0xb68de000)
                                              	libffi.so.6 => /usr/lib/arm-linux-gnueabihf/libffi.so.6 (0xb68c8000)
                                              	libpcre.so.3 => /lib/arm-linux-gnueabihf/libpcre.so.3 (0xb686b000)
                                              	libthai.so.0 => /usr/lib/arm-linux-gnueabihf/libthai.so.0 (0xb6855000)
                                              	libpixman-1.so.0 => /usr/lib/arm-linux-gnueabihf/libpixman-1.so.0 (0xb67cb000)
                                              	libfontconfig.so.1 => /usr/lib/arm-linux-gnueabihf/libfontconfig.so.1 (0xb678e000)
                                              	libfreetype.so.6 => /usr/lib/arm-linux-gnueabihf/libfreetype.so.6 (0xb6717000)
                                              	libpng12.so.0 => /lib/arm-linux-gnueabihf/libpng12.so.0 (0xb66ef000)
                                              	libxcb-shm.so.0 => /usr/lib/arm-linux-gnueabihf/libxcb-shm.so.0 (0xb66dc000)
                                              	libxcb-render.so.0 => /usr/lib/arm-linux-gnueabihf/libxcb-render.so.0 (0xb66c4000)
                                              	libXrender.so.1 => /usr/lib/arm-linux-gnueabihf/libXrender.so.1 (0xb66ad000)
                                              	libXext.so.6 => /usr/lib/arm-linux-gnueabihf/libXext.so.6 (0xb6692000)
                                              	libz.so.1 => /lib/arm-linux-gnueabihf/libz.so.1 (0xb6670000)
                                              	librt.so.1 => /lib/arm-linux-gnueabihf/librt.so.1 (0xb665a000)
                                              	libXau.so.6 => /usr/lib/arm-linux-gnueabihf/libXau.so.6 (0xb664e000)
                                              	libXdmcp.so.6 => /usr/lib/arm-linux-gnueabihf/libXdmcp.so.6 (0xb663a000)
                                              	libselinux.so.1 => /lib/arm-linux-gnueabihf/libselinux.so.1 (0xb6615000)
                                              	libresolv.so.2 => /lib/arm-linux-gnueabihf/libresolv.so.2 (0xb65f5000)
                                              	libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0xb65cd000)
                                              	libdatrie.so.1 => /usr/lib/arm-linux-gnueabihf/libdatrie.so.1 (0xb65b8000)
                                              	libexpat.so.1 => /lib/arm-linux-gnueabihf/libexpat.so.1 (0xb6590000)
                                              
                                              1 条回复 最后回复 回复 引用 0
                                              • 第一个帖子
                                                最后一个帖子