V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhxjdwh
V2EX  ›  程序员

ntfs-3g 一个神奇的问题

  •  
  •   zhxjdwh · 2019-12-05 15:14:35 +08:00 via Android · 4373 次点击
    这是一个创建于 1804 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 linux 创建的文件,Windows 下看不到

    在 linux 下删掉的文件,Windows 还能正常打开

    反之亦然😂

    20 条回复    2019-12-06 11:00:08 +08:00
    Eleutherios
        1
    Eleutherios  
       2019-12-05 15:59:49 +08:00 via iPhone
    Linux 下用 ntfs-3g 挂载硬盘默认是只读模式……
    zhxjdwh
        2
    zhxjdwh  
    OP
       2019-12-05 16:04:15 +08:00 via Android
    @Eleutherios 我改成可读写了
    cev2
        3
    cev2  
       2019-12-05 19:07:41 +08:00
    能详细说一下环境吗?
    CentOS or Ubuntu or OpenWRT ?
    移动存储设备 or SMB or 双系统?
    zhxjdwh
        4
    zhxjdwh  
    OP
       2019-12-05 20:16:43 +08:00 via Android
    @cexid manjaro 18,manjaro 里装 kvm 跑个 win10,kvm win10 直接从物理磁盘引导,manjaro 同时挂载这个硬盘到文件系统,这样两个系统都可以直接访问到这个硬盘,就是有些莫名其妙的问题
    zhxjdwh
        5
    zhxjdwh  
    OP
       2019-12-05 20:20:09 +08:00 via Android
    @cexid rm -f 强制删掉一个文件,Linux 下已经看不到了,Windows 居然还能正常访问这个文件,两边创建的文件,互相都看不见,linux 修改了某个文件,Windows 看的话,还是之前的版本,没有任何变化
    zhxjdwh
        6
    zhxjdwh  
    OP
       2019-12-05 20:20:57 +08:00 via Android
    @cexid 😂有点像 docker
    cev2
        7
    cev2  
       2019-12-05 20:37:12 +08:00
    @zhxjdwh 哈哈,你还真敢想。这个锅 ntfs-3g 可不愿意背,你这和 Windows 10 安装双系统不关 [快速启动] 一样一样滴,为了防止以后造成更大的损失,你可以先演练一下,两个系统同时往该分区复制文件然后把电脑插头拔了。看看会有什么后果。
    两个系统访问文件用 SMB 或 SFTP 它不香吗?
    kokutou
        8
    kokutou  
       2019-12-05 20:40:36 +08:00
    @zhxjdwh #4
    居然两个系统都挂载这个硬盘。。。

    骚操作骚操作。。。

    九年义务教育,为何唯独你这么优秀。。。。
    cev2
        9
    cev2  
       2019-12-05 20:45:07 +08:00
    @zhxjdwh 你这和那些搞 P2P 跑路的老板一样,明明兜里只有 1 块钱,却给每个人账户上都显示 1 元,等大家取出时,你就发现文件都损坏了。
    zhxjdwh
        10
    zhxjdwh  
    OP
       2019-12-05 20:47:12 +08:00 via Android
    @kokutou 😂不管怎么骚操作都无法解释,一边删掉了,另一边还存在,还能正常访问,哈哈
    Dslayer
        11
    Dslayer  
       2019-12-05 20:54:29 +08:00   ❤️ 2
    忍不住找了半天密码特意登上来回复,

    共享文件系统( Shared-disk file system、Clustered file system )了解一下。
    比如说 vmfs,允许多个 esxi 主机同时挂载并读写同一个 block device,
    要做到这一点,需要在文件系统设计之初以此为目标,实现比较复杂的锁机制,
    在多个 host 上同步 metadata, 并且有不低的性能开销。

    ntfs、fat32、ext4 等等常见的文件系统并非以此为目标设计的。

    就是说为了保证合理的性能,操作系统必然要把文件系统上的数据和元数据缓存到内存里,
    普通情况下并不会发生磁盘上的数据变更而不会通知操作系统的情况。

    在 windows vm 里的写入(删除操作算是对 metadata 的写入),并不会直接通知到 ntfs-3g。

    多个操作系统同时读写一个普通的文件系统,结果就是文件损坏甚至文件系统彻底损坏。
    zhxjdwh
        12
    zhxjdwh  
    OP
       2019-12-05 20:57:20 +08:00 via Android
    @Dslayer 😂我错了,不能这样骚操作
    Dslayer
        13
    Dslayer  
       2019-12-05 21:03:43 +08:00
    @zhxjdwh 删除操作并不是直接抹除文件,在没有 trim 这回事的时候,只不过是标记此处区域已空出,以后的文件可以分配在此处。有 trim 的情况下则比较复杂,3 种情况 视 trim 的具体实现属于 Non-deterministic TRIM / DRAT / RZAT 而定。

    所以,A 删除了文件,是 A 把自己的 文件系统缓存里,和磁盘上,在 元数据里标记此处磁盘空间空闲; 此时 B 的文件系统缓存里的元数据仍然标记此处存在前述文件。
    明显的问题:
    1. 此时若 A 写入文件,有可能覆盖此文件,B 再读取此文件,若内存的缓存里无此文件,从磁盘读取到的就是损坏的文件。
    2. 若随后 A 和 B 均无大量文件写入,A 先关机(或 unmount ),B 之后关机(或 unmount ),还可能发生 A 修改之前的元数据被 B flush 到硬盘,导致文件明明从 A 写入了,却又消失了的情况。

    总之一句话,别这么用。。。 非得临时这么用一下,那就保证只有 1 个 host 允许写入。
    zhxjdwh
        14
    zhxjdwh  
    OP
       2019-12-05 21:18:24 +08:00 via Android
    @Dslayer ☺️学习了!谢谢你!!!
    zhxjdwh
        15
    zhxjdwh  
    OP
       2019-12-05 21:22:11 +08:00 via Android
    @Dslayer 😂我就这块硬盘最大,给哪个系统都不行,里面有很多东西,工作代码项目都在硬盘上,然后 想试下能不能两个系统同时用,两边都可以写代码,😂没报错,然后就这样用了,哈哈
    Dslayer
        16
    Dslayer  
       2019-12-05 21:32:19 +08:00
    @zhxjdwh 。。。
    里面有很多东西还这么玩,
    建议:
    unmount ntfs 分区,强关 windows vm。
    立刻,马上查明重要的东西有没有备份。
    若无,ntfs-3g 只读挂载之,尝试复制出来。
    如果确实丢失了文件,不是特别重要的话,在 windows 里用 recuva 试一下恢复数据。
    特别重要的就在避免读写方式挂载的前提下,尝试恢复数据,或者镜像出来搞。
    e... windows 下分配了盘符就算是挂载;只要挂载就可能产生写入。
    文件如果有损坏的多半凉了。
    在确保重要的东西无恙之后,chkdsk 一下吧,很有必要。

    以后谨慎点儿~ e... 我大学时候这么玩丢了一分区数据
    Dslayer
        17
    Dslayer  
       2019-12-05 21:48:06 +08:00   ❤️ 1
    不能只说不要这么做,还要说一下正常的做法:
    ntfs-3g 的确有一些问题,
    数据放在 exfat 等 linux 完善支持的文件系统里,起 samba,
    在 windows vm 里挂载此 samba 共享。

    然而,既然 win10 直接从物理磁盘引导,此通常做法大概不适用,
    如此双系统确实可行,当初我就拿 xp embedded 玩过,后来使用 wes7 玩过。
    有可能会面临一堆问题,建议做好 windows 突然崩溃掉需要重装的心理准备, 数据做好备份。

    提醒楼主专注于学习 /工作 中真正重要的事情,不要被这些花里胡哨的分散了太多精力。
    看起来很牛,实际对(以后的)工作帮助不大。 估计还是学生吧。。。

    比如说吧,我就特擅长此类杂务,各种工具玩出了花,
    然而,作为打杂网管,看隔壁研发的同事拿自己好几倍工资眼红。

    重点:
    能用于工作的,就是能赚钱的,
    只有主流的广泛验证过的解决方案,
    奇技淫巧难以形成核心竞争力。
    zhxjdwh
        18
    zhxjdwh  
    OP
       2019-12-05 22:03:22 +08:00 via Android
    @Dslayer 😂三年的码农,最近突然想把从 Windows 切换到 linux 下,但是有些软件实在没办法,只能只能运行两个系统,一个屏幕一个系统,
    你很棒啊,我们公司的运维只会装系统装 office,有什么问题就装下 360 杀下毒看看,😂我都懒得吐槽了
    Dslayer
        19
    Dslayer  
       2019-12-05 22:35:43 +08:00
    @zhxjdwh 都工作 3 年了那就没什么好提醒的了😂
    既然起 qemu-kvm。。。 而不是直接 vbox 完事, 算是有心折腾吧,

    都工作 3 年了大概不差钱,如果 windows 的性能需求不高,
    拿铁熊猫 / intel nuc / intel 计算棒 / gpd 上网本 什么的都可以试一下咯,
    m3 cpu 轻度办公基本可用,内存有 8g 也凑合能用,4g 挺勉强的多凑合一下也能用。
    其中 intel nuc8 和即将面市的 nuc10 相对靠谱,
    一根 PD 转 DC 20v 的线可搭配 20v 45 瓦以上的 PD 充电头或者紫米充电宝。

    或者 linux 放到另一个设备上,这样一来除了前述设备,rasp pi 及其模仿品,
    还有 chromebook 什么的都可以尝试下咯。

    e,这儿居然没有私信功能。我有点想展示下正在尝试,勉强接近稳定的终极神奇用法。
    简单来说就是 联想 y9kx,archlinux, 雷电 3 接 rx580, 直通给 win10 vm。
    貌似明显优点就一个,win10 vm 享受 btrfs snapshot。
    无外接显卡时使用 gvt-g 直通 intel 核显
    不过。。。qxl 也够用了,rdp 不需要受控端有 3d 加速, 用 nomachine 远控风扇暴走。

    有条件如此倒腾,因为我自己最常用的软件只有 chromium 和 firefox。。。
    ifxo
        20
    ifxo  
       2019-12-06 11:00:08 +08:00
    现在没人维护了吧,性能不如这个 https://www.paragon-software.com/us/home/ntfs-linux-professional/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1050 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 76ms · UTC 20:13 · PVG 04:13 · LAX 12:13 · JFK 15:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.