保护双启动的Windows免受危险代码(如rm -rf)的影响。

我在考虑在同一块固态硬盘的不同分区上双启动Windows 10和Ubuntu。如果在Ubuntu分区中发生类似rm -rf这样的代码,会影响到Windows吗?还是它只会保持其他分区不受影响?如果确实会影响到Windows分区,我该如何防止这种情况发生?

3备份数据(这本来就是你应该做的!) - pjc50
2大家都很担心这个问题,但我建议你创建一个Docker容器并尝试一下。大多数Linux发行版会要求你回答“是”并输入密码以执行一些相当愚蠢的操作。 - bremen_matt
4个回答

如果你可以物理接触到一台计算机,那么你就有能力对其中的文件进行任何操作,包括阅读、损坏或删除。
不过,我们可以采取措施来减少意外删除文件的可能性。
如果你想在Windows 10分区上阅读文档,你可以将该分区挂载为只读模式。虽然你无法编辑Word文档,但如果你只是想阅读PDF文件、听MP3音乐或在Windows分区上观看电影,这应该已经足够了。另一种可能性是在Windows下创建一个FAT32的D盘分区,并在Ubuntu下以可写权限挂载它。
我可以想到至少5个简短的命令来从Linux系统中销毁Windows分区,但它们都需要root权限。当你想要运行以sudo开头的命令或者程序告诉你“需要验证才能运行”时,请务必小心谨慎。
最后,在安装Ubuntu时要非常小心,安装程序会清楚地显示哪些分区被调整大小、创建或删除,但如果你忽视警告太久,仍然有可能删除现有的分区。
为了安全起见,请遵循 @Emmet 的优秀建议(务必备份您的数据)。

2有相同数量的Windows命令可以损坏Ubuntu分区。 - Brilsmurfffje
3@Brilsmurfffje:当然可以从Windows损坏Ubuntu分区。不过,通常在Windows之后安装Ubuntu,在Ubuntu中挂载NTFS比在Windows中挂载Ext4更容易,并且在Ubuntu中命令行更为普遍。 - Eric Duminil
2每当我双启动Win/Lin时,我都会创建一个在Windows中显示为D:的FAT32分区,并使用它在操作系统之间传输文件。我简单地不相信Windows能够以写权限访问ext3/4文件系统,也不相信Linux能够以写权限访问NTFS文件系统。 - Monty Harder
1如果你可以亲自接触到一台计算机,那么你就拥有对其上的文件进行任何操作的能力,包括阅读、破坏或删除它们。不过,考虑到加密技术的存在,我觉得你可能有点过于草率地提到了"阅读"这个操作。 - user541686
@Mehrdad:你说得对。我找不到在这个句子中提及加密文件的方式,因为即使无法解密内容,你仍然可以损坏或删除它们。 - Eric Duminil

常见的基本防止数据丢失的方法是:记得始终备份你的文件。
这不会影响Windows分区,因为你是从Ubuntu机器上运行的。
可以这样来理解。
/dev/sda1 ntfs-bootfile
/dev/sda2 ntfs-win
/dev/sda5 ext4-root --> (YOUR LOCATION NOW)
/dev/sda6 ext4-swap

如果你在你的位置运行rm -rf命令,它会影响sda5分区,其中存放着你的Ubuntu系统。所以这只会影响到Ubuntu。
假设你的grub引导加载程序用于加载两个操作系统(Ubuntu和Windows),如果你意外地删除了GRUB文件,Windows将无法启动,但里面的数据将保持完好。
然而,当Ubuntu可用时,它倾向于挂载Windows分区,如果你运行rm -rf /*命令,Ubuntu将毫不犹豫地删除所有文件,包括Windows分区。
还有臭名昭著的dd命令,因此被称为“磁盘破坏者”。它被广泛用于格式化驱动器、克隆磁盘、创建可引导的USB等操作。 dd具有转储整个主要驱动器的能力,dd if=/dev/zero of=/dev/sda将用零替换主要驱动器上的所有数据,我们的数据就此消失!
说到这里,请在执行命令之前非常小心,并始终再三确认,最好在灾难发生之前防患于未然。
我强烈推荐你学习各种Linux命令,这样在运行之前就能知道命令的作用。
另外,在使用dd时,请务必详细操作,将sdb误输入为sda是常见错误,一旦发生这种情况后果不堪设想。

12OP问到关于“类似rm -rf的代码”的问题。对我来说,这意味着在Linux系统上可以执行的各种破坏性命令。其中一些命令会在Windows系统上引起问题。例如,cat /dev/zero > /dev/sda会将零写入到/dev/sda的所有位置,从而删除该驱动器上的所有数据,甚至可能导致整台计算机的数据丢失。当然,在实践中这样的情况较少发生,但是为了给出一个完整的答案,我们需要承认这些潜在的问题。如果确实需要安全隔离以防止Linux对Windows(或反之)造成问题,唯一足够的方法就是使用某种虚拟机。 - john01dav
2此外,Windows分区可以挂载在/media/mnt目录下。在这种情况下,使用rm -rf命令肯定能够销毁Windows文件。 - Eric Duminil
4如果在Ubuntu中挂载了Windows分区,那么这个答案是错误的!比如说,如果Windows文件系统被挂载在/mnt下,并且你运行了rm -rf /*命令,那么Windows的文件就会消失不见了... - marcelm
@marcelm:可能是竞争条件吗,例如:Windows 文件在 rm -rf 需要的文件删除之前被删除了吗? - Eric Duminil
@EricDuminil 不,它们将在之后被删除。然而,它们被加载到内存中,所以即使删除它们,计算机仍然可以访问它们,直到为时已晚。 - wizzwizz4
4不,它们之后会被删除。这取决于 "*" 的扩展方式,通常按字母顺序,所以 "/bin" 在 "/mnt" 之前。但实际上,顺序并不重要,因为正如你已经说过的那样,"rm" 已经存在于内存中,这是唯一重要的事情。 - rexkogitans
@rexkogitans:有趣。我不确定一旦启动rm,是否需要其他进程或库来工作。 - Eric Duminil
2假设系统没有进行交换,一旦rm打开了它所需的所有库,那么这些库是否从文件系统中被删除就无关紧要了。它们将保留在磁盘上,虽然已经被删除但仍然被rm打开。可能会导致问题的是当操作系统尝试启动一个需要已被删除的文件或设备的新进程时。在那一点上,您可能会使系统陷入恐慌。 - doneal24

如果你无法在一个磁盘上同时运行两个操作系统而不会相互干扰,那么你可能需要寻找其他解决方案。这取决于你的实际需求和预算,以下是一些选择。
你可以将一个(或两个)系统作为虚拟机来运行,而不是使用单独的分区。虚拟机应该对主机或其他虚拟机的访问进行限制,以防止意外损坏主机机器(尽管仍然有故意的方法)。另一个优点是你可以同时使用两个系统。
如果你希望完全隔离两个操作系统,可以将它们安装在可交换的硬盘上,甚至更好的是安装在不同的计算机上(这样就不会意外破坏你的硬盘)。
如果你需要能够访问数据,但经常在Linux上做一些可能会意外损坏Windows系统的事情,可以将它们安装在不同的机器上,并通过遵守Windows安全机制的远程访问工具来访问Windows。这样你就可以完全访问你的数据,并且具有非常高的安全性,只需花费几百欧元/美元购买额外的硬件。此外,如果其中一个系统出现故障,你还有一个备份系统,所以如果你在这些机器上工作,额外的成本可能会得到回报。

风险如此可以通过在Windows10操作系统上启用BitLocker驱动器加密来轻松减轻。对分区进行加密使得Ubuntu无法挂载,从而无法执行像rm -r这样的操作。
这也意味着您无法通过Windows分区与Ubuntu系统共享文件。
如果您想在两个操作系统之间共享数据,我建议您创建一个单独的数据分区,在两个操作系统上都挂载它。

5无法挂载文件系统并不意味着Ubuntu无法损坏它。dd仍然可以覆盖Windows使用的磁盘相关扇区,使加密文件系统永久无法恢复。 - Patrick Trentin
2@PatrickTrentin:确实。您可能无法从Windows分区中读取任何有意义的内容,但是catddfdiskpartedmkfs.ntfs都可以愉快地销毁分区上的任何数据,无论是否加密。 - Eric Duminil