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


10

我对Windows感觉很好,现在感觉像个白痴。

我有一个用于ubuntu的SSD,并且想将大多数程序安装到单独的HDD中,但是我不知道如何安装。
我尝试过的所有搜索仅在双引导安装中出现。

  • (已解决->) 我在查找“ / etc /”时也遇到了麻烦。具体来说,就是要修改Conky。
    搜索该术语只会出现有人告诉您访问此文件而不是如何获取该文件的情况。

1
看看This,它会让您入门。
米奇

我的印象是所有内容都从主文件夹扩展而来。哎呀 您链接的页面对我的问题没有帮助,但是我现在正在阅读并学习很多,所以谢谢。
plaguedoctor 2013年

我添加了mount和fstab标签;您可以通过手动设置要挂载在特定分区或驱动器上的特定文件系统来执行您要描述的事情。
belacqua 2013年

@belacqua除此之外还有其他方法吗?我不仅要在另一个驱动器上使用特定的文件系统,还需要特定程序的所有文件系统。这样,我可以按照系统的密集程度对它们进行排序,将游戏/ virtualbox / etc完全放在我的SSD上,将libreoffice / thunderbird之类的东西完全放在一个HDD上。
plaguedoctor

确定给定安装及其文件可能位于何处不是那么容易-请参阅提到的Mitch链接中的答案。您也可以使用符号链接之类的东西,但是我的建议是从简单开始。查找一个示例应用程序,在此处提出一个具体问题(或修改为较不通用),然后从那里开始。或谨慎尝试。
belacqua

Answers:


22

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”中,而不是在“文件夹/ usr / share /”中应用程序。

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

linuxfromscratch上建议的另一种选择是将软件包解压缩到合适的位置,然后创建指向相应FHS位置中所有已安装文件的符号链接。

由于在评论中您是指游戏:许多不是通过Ubuntu Software Center购买的游戏都是安装程序可执行文件,因此可以将它们安装到任何文件夹中,通常是主目录的子文件夹。使用WINE运行的Windows游戏也可以安装在所需的任何目录中。对于Wine,存在一个称为WINEPREFIX的环境变量,您可以使用该变量设置许多独立的WINE文件夹,每个文件夹都包含其自己的虚拟C:驱动器。阅读WINE手册页以获取更多信息。

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


正确,值得投票O
Rinzwind

1
但是,它还不完整,因为我没有详细解释在任意位置运行安装软件包所需要的内容,必须编辑的文件以及需要设置的环境变量。我只是怕那会成为一部中型小说……
soulsource

1
我不会打扰。只需在其他地方挂载/ etc /。它从ssd获取了90%的光盘负载。
Rinzwind

5

TL; DR

  1. 使用您刚安装的Ubuntu版本引导外部USB磁盘,我假设/dev/sda是您的SSD和/dev/sdb您的HDD。

  2. 在硬盘上创建一个分区,以使用gparted包含您要安装的所有应用程序(例如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被认为是桌面OS,而服务器是带有桌面的服务器。

因此,Linux Filesystem Hierarchy Standard允许您将无限数量的驱动器/分区放置在任何位置,并将它们绑定到正确的驱动器或分区,对用户完全透明,而Windows OS最多只能使用24个可访问的驱动器/分区(C:通过Z:as A:B:为软盘保留。)

您自己安装的大多数应用程序都已安装到/opt/和中/usr/bin,因此请正常安装Ubuntu,然后按照以下步骤操作,我向/dev/sda您保证的是SSD,/dev/sdbHDD和/dev/sddUSB记忆棒:

  1. 使用您刚安装的Ubuntu版本引导外部USB磁盘。
  2. 在硬盘上创建一个分区,以使用gparted包含您要安装的所有应用程序(例如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


实际上,Windows已经有相同的支持,可以将驱动器安装在非根路径上了大约十年。而且这些驱动器号也可以按用户映射,因此H:\可以是按用户的主目录。毫不奇怪:Windows NT系列受到VMS(非常多用户系统)的启发。Unix也不被认为是服务器操作系统:AT&T制造了电话交换机。UNIX与它的启发性Multics特别不同之处在于,它起初不太面向多用户使用-根本就不需要电话交换机。
MSalters

@MSalters哇,我不知道AT&T的电话切换位...我确实记得 VMS / NT部分,M $也聘用了DEC的首席工程师,还有OS / 2部分,但是在此之前,它是Single-用户抢占式多任务桌面外壳。 > :-)更新!
Fabby

1
Windows还支持非盘符驱动器(1:!:等等),就像DOS的某些版本(与其他字符,[:等等)。Windows正在局限于24个分区(查找卷装入点)。Windows的早期版本(95之前的版本)在Windows进程之间使用协作式多任务处理,而不是抢先式;只有DOS VM抢先了多任务(在增强模式下)。
史蒂芬·基特

1
我曾经在UNIX小组的AT&T工作。它并没有像电话开关那样开始生活。
stevegt

@MSalters Unix似乎与电话交换机没有任何关系,除非这家负责任的公司同时开发了这两者。在创建该名称的那一刻,它似乎是多用户的。请参阅SE RC上的此答案
彼得-恢复莫妮卡

2

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

这可能不是您想要的,但是如果您的驱动器很小,并且想要从其他软件(GIMP,IDE,游戏)中拆分重要软件(GNOME桌面,Web浏览器)以节省一些本地空间,并且使您的计算机在没有外部驱动器的情况下仍能正常工作,这是迄今为止IMO的最佳解决方案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.