如何将应用程序安装到单独的硬盘?

如何将应用程序安装到单独的硬盘?

我以前对 Windows 非常熟悉,但现在我感觉自己像个十足的白痴。

我有一个用于 ubuntu 的 SSD,想将大部分程序安装到单独的 HDD 上,但我不知道该怎么做。
我尝试过的所有搜索都只显示双启动安装。

  • (已解决 -> ) 我也找不到“/etc/”。具体来说,就是修改 Conky 时遇到的问题。
    搜索这个术语只会显示有人告诉你如何访问这个文件,而不是如何访问它。

答案1

Windows 和 GNU/Linux 之间存在重大差异。在 Windows 上,通常每个程序及其依赖的所有库都安装在单独的文件夹中。这通常会导致大量磁盘空间浪费,因为每个使用库的程序都要多次安装库。

在 Linux 上,程序的安装遵循文件系统层次标准(FHS)。这意味着,程序所依赖的库都安装在一个共同的专用位置,因此无论有多少程序使用它们,它们通常都只安装一次。此外,程序的构建方式是,它们都使用某个库的相同版本。这节省了磁盘空间(和运行时的 RAM),但有一个缺点,即不能自由地将程序安装在不同的分区或硬盘上,至少在不编辑系统配置文件(例如 /etc/ld.so.conf.d 以包含不同的库文件夹)的情况下不能。

由于 Debian 软件包系统是在考虑 FHS 的情况下实现的,据我所知,没有简单的方法可以将 Debian 软件包安装到与预期放置位置不同的文件夹中,并让它们正常工作,而无需事后手动移动和编辑文件。这是因为路径通常在编译时硬编码。因此,即使您将软件包安装到不同的文件夹(例如通过dpkg --instdir=folder/ package.deb在命令行上使用),程序仍将在“/etc”而不是“folder/etc”中查找其配置,但软件包附带的配置文件当然安装在“folder/etc”中……程序也不会添加到菜单中,因为菜单文件应该位于“/usr/share applications”中,而不是在 folder/usr/share/applications 中。

当然,您可以手动配置并从源代码编译程序让它将二进制和数据部分安装在您想要的任何位置,同时仍将配置文件安装到符合 FHS 的位置,但我只建议高级用户这样做。如果你要从源代码编译,请查看检查安装,一个自动创建 Debian 软件包的工具。

另一个选择是linux从零开始,是将包解压到合适的位置,然后在相应的 FHS 位置创建指向所有已安装文件的符号链接。

因为您在评论中提到了游戏:许多未通过 Ubuntu 软件中心购买的游戏都以安装程序可执行文件的形式提供,这些游戏当然可以安装到任何文件夹,通常是主目录的子文件夹。使用 WINE 运行的 Windows 游戏也可以安装在您想要的任何目录中。对于 wine,存在一个名为 WINEPREFIX 的环境变量,您可以使用它设置许多独立的 WINE 文件夹,每个文件夹都包含自己的虚拟 C: 驱动器。阅读 WINE 手册页了解更多信息。

即使游戏/程序以 Debian 软件包的形式提供,您也可以在您最喜欢的存档管理器中查看软件包内容。如果游戏要安装在 /opt 中,您通常可以安全地将其安装到其他文件夹,因为 /opt 通常用作不遵守 FHS 的程序的安装位置。

答案2

总结

  1. 使用您刚刚安装的 Ubuntu 版本启动外部 USB 磁盘,我假设/dev/sda它是您的 SSD 并且/dev/sdb是您的 HDD。

  2. 使用以下命令在硬盘上创建一个分区,以包含要安装的所有应用程序(假设为 64 GB)分区我假设这将是你在硬盘上创建的第三个分区(/dev/sbd3

  3. 执行以下命令:

    mkdir /media/apps
    mount /dev/sdb3 /media/apps
    mkdir /media/apps/usr
    cp --preserve=all --recursive /opt /media/apps
    cp --preserve=all --recursive /usr/bin /media/apps/usr
    
  4. sudo nanofstab在条目(根目录)后立即/dev/sda1/etc/包含以下内容/

    /dev/sdb3  /media/apps          ext4   errors=remount-ro  0   0 
    /opt       /media/apps/opt      none   defaults,bind      0   0
    /usr/bin   /media/apps/usr/bin  none   defaults,bind      0   0
    
  5. 重启并测试

长版本:

Unix/Linux/Ubuntu 被认为是一种服务器操作系统,其次才考虑桌面,而 Windows 被认为是一种桌面操作系统,而服务器是其次才考虑的。

因此 Linux文件系统层次标准让你有一个不限数量驱动器/分区位于任意位置并将它们绑定到正确的驱动器或分区对用户完全透明而 Windows 操作系统最多只能访问 24 个驱动器/分区(C:通过Z:asA:B:保留用于软盘)。

您自行安装的大多数应用程序都安装在/opt/和中/usr/bin,因此请正常安装 Ubuntu,然后使用以下步骤,其中我假设/dev/sda是您的 SSD,/dev/sdb是您的 HDD 并且/dev/sdd是您的 USB 记忆棒:

  1. 使用刚刚安装的 Ubuntu 版本启动外部 USB 磁盘。
  2. 使用以下命令在硬盘上创建一个分区,以包含要安装的所有应用程序(假设为 64 GB)分区我假设这将是你在硬盘上创建的第三个分区(/dev/sbd3
  3. 将该分区挂载到临时目录中:

    mkdir /media/apps
    mount /dev/sdb3 /media/apps
    
  4. 将现有的复制/opt/usr/bin那里:

    mkdir /media/apps/usr
    cp --preserve=all --recursive /opt /media/apps
    cp --preserve=all --recursive /usr/bin /media/apps/usr
    
  5. sudo nanofstab在条目(根目录)后立即/dev/sda1/etc/包含以下内容/

    /dev/sdb3  /media/apps          ext4   errors=remount-ro  0   0 
    /opt       /media/apps/opt      none   defaults,bind      0   0
    /usr/bin   /media/apps/usr/bin  none   defaults,bind      0   0
    
  6. 重启并测试

  7. 如果一切正常,请重新启动 USB 驱动器并删除其中的所有内容,/dev/sda1/opt/dev/sda1/usr/bin回收目前仍在使用的磁盘空间(已在其他地方安装的过时目录)。

警告:最后一个命令可能/dev/sbd3由于硬件故障导致无法安装,也会导致系统崩溃

答案3

我对 Chromebook 使用的解决方案是不安装软件包,而是下载其 .tar.gz 对应文件。

这可能不是您想要的,但如果您的驱动器非常小,并且想要将重要软件(GNOME 桌面、Web 浏览器)与附加软件(GIMP、IDE、游戏)分离以节省一些本地空间并让您的计算机在没有外部驱动器的情况下继续工作,在我看来,这是迄今为止最好的解决方案。

答案4

随着现在越来越多的程序以 AppImage 文件形式提供,您当然可以简单地将它们下载到外部硬盘并从那里运行它们。

相关内容