如何在 Touch 上获得更大的根分区

use*_*608 9 filesystem partitioning ubuntu-touch

我正在尝试使 Touch (14.10) 作为 Ubuntu 服务器工作。但是,根分区只有 2 GB,不足以容纳我需要安装的软件包。有没有办法在根分区上获得更多空间?

到目前为止,我已经尝试过:

  • /dev/loop0 上的 resize2fs 将不起作用,因为内核不支持在线调整大小,而且我无法卸载 root(即使使用 -f,ro 也不会剪切它)。

  • 在 /userdata/ubuntu.img 的末尾添加 2 GB 有效,但文件上的 resize2fs 没有帮助。

小智 1

我遇到了类似的问题,最终我决定将我的移动/usr/home/usr/home从14G文件系统安装,这为我提供了足够的空间来容纳额外的软件包)。

这是一种有点黑客的方法,但它似乎对我有用。以下代码示例用于$指示应以普通用户身份运行命令并#指示 root 用户角色(可以通过 sudo 或 loggig 作为 root 获得)。

  1. 为 root 用户设置密码,您需要能够以 root 身份登录,以防您的/usr/bin/sudo. 为此:

    $ sudo su
    # passwd
    
    Run Code Online (Sandbox Code Playgroud)
  2. /usr复制保留所有权和权限的内容:

    $ cd /usr
    $ sudo find . -depth -print0 | sudo cpio --null --sparse -pvd /home/usr/
    
    Run Code Online (Sandbox Code Playgroud)
  3. 下一个合乎逻辑的步骤是在启动时使用fstab挂载,但是我尝试对 所做的所有更改在重新启动 Ubuntu 后都消失了。所以我创建了简单的脚本来进行安装,并将其另存为:/home/usr/usrfstab/etc/init.d/bind.sh

    #!/bin/sh
    if [ "X$1" = "Xstart" ]; then
      echo "Binding /home/usr to /usr..."
      chmod 4755 /home/usr/bin/passwd /home/usr/bin/chsh /home/usr/bin/pkexec /home/usr/bin/sudo /home/usr/bin/newgrp /home/usr/bin/gpasswd /home/usr/bin/chfn /home/usr/lib/pt_chown /home/usr/lib/eject/dmcrypt-get-device /home/usr/lib/openssh/ssh-keysign /home/usr/lib/dbus-1.0/dbus-daemon-launch-helper /home/usr/lib/policykit-1/polkit-agent-helper-1 /home/usr/lib/arm-linux-gnueabihf/oxide-qt/chrome-sandbox /home/usr/lib/arm-linux-gnueabihf/lxc/lxc-user-nic
      mount -o bind,suid /home/usr /usr
      echo "...done"
    fi 
    
    Run Code Online (Sandbox Code Playgroud)

    需要 chmod 行,因为我注意到安装后有时suid bit会丢失该行。通过在原始目录上运行可以找到已设置的文件列表。请注意,如果您稍后安装任何使用它的东西,它可能会损坏,除非您将其添加到列表中。suid bit# find /usr -user root -perm -4000/usrsuid bit

    您需要在/etc/rcS.dfor中创建符号链接bind.sh

     # ln -s /etc/init.d/bind.sh /etc/rcS.d/S36bind.sh
    
    Run Code Online (Sandbox Code Playgroud)

    注意:您可能需要选择 36 以外的数字,具体取决于您的/etc/rcS.d.

    或者,您可以按照此处/lib/init/fstab所述进行编辑,以在 fstab 中进行持久更改。

  4. 重新启动后,系统现在应该正在使用/home/usr,因此/usr希望您应该有更多的空间来容纳其他软件包。请注意,/usr只要安装了新目录,旧目录仍然存在,但无法访问。

    如果出现任何问题,您可以通过重命名符号链接/etc/rcS.d并重新启动来返回到之前的状态:

     # mv /etc/rcS.d/S36bind.sh /etc/rcS.d/K36bind.sh
    
    Run Code Online (Sandbox Code Playgroud)