V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
xuerui911
V2EX  ›  Linux

求助: Rclone 挂载 onedrive 后在 1drive 中 git 问题

  •  
  •   xuerui911 · 2020-03-29 12:33:18 +08:00 · 1060 次点击
    这是一个创建于 1698 天前的主题,其中的信息可能已经有所发展或是发生改变。
    编程小白求助, 求大佬们指导

    我想编译定制 openwrt 固件, 需要 git clone -b dev-19.07 https://github.com/Lienol/openwrt && cd openwrt && ./scripts/feeds clean && ./scripts/feeds update -a && ./scripts/feeds install -a && make menuconfig.
    自己选择需要的配置后, make -j1 V=s

    上面那个 github 项目写着不要用 root 用户 git 和编译, 在本地电脑虚拟机, 用普通用户执行命令会报错无法 git clone 提示没权限创建文件夹, 用 root 用户可以完成 make menuconfig, 在 make V=s 这步会报错提示你不应该用 root 用户, 最终用普通用户 sudo su 执行完 make menuconfig 再 exit 回到普通用户执行 make V=s 能成功编译.

    北京联通, 访问 github 奇慢无比, 通过梯子可以成功, 但编译也太占本地硬盘空间.

    我买了 onedrive for business.
    有个墙外 vps, 多数端口被墙, 但给留了 22 和 80 端口, 所以考虑 ssh 此 vps 挂载 onedrive 后 git clone 到 1drive 中并编译, 编译完后再把固件下载回来.

    在 Windows 下用的是 RaiDrive, 上网一番查, Linux 下大家用的比较多的是 RClone.

    本地电脑虚拟机和 VPS 系统都是 Ubuntu.

    rclone config, 我的配置中, 我给挂载盘在 rclone 中起名为 my1drive, VPS 中目录为 /VPSMount/hk1, 本地挂载目录为 /home/mnt1drive/1drive

    执行 rclone mount my1drive:VPSMount/hk1 /home/mnt1drive/1drive --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000 --vfs-cache-mode minimal

    这时程序运行, 没有返回结果. 先不注册为服务, 先能进入 make menuconfig 目录再说, 新建 ssh 会话, sudo su, git clone -b dev-19.07 https://github.com/Lienol/openwrt && cd openwrt && ./scripts/feeds clean && ./scripts/feeds update -a && ./scripts/feeds install -a && make menuconfig
    这时会提示
    Cloning into 'openwrt'...
    remote: Enumerating objects: 518949, done.
    remote: Total 518949 (delta 0), reused 0 (delta 0), pack-reused 518949
    Receiving objects: 100% (518949/518949), 378.20 MiB | 9.18 MiB/s, done.
    Resolving deltas: 100% (349100/349100), done.
    error: unable to append to '/home/mnt1drive/1drive/openwrt/.git/logs/refs/remotes/origin/HEAD': Input/output error
    fatal: update_ref failed for ref 'HEAD': cannot update the ref 'HEAD': unable to append to '/home/mnt1drive/1drive/openwrt/.git/logs/HEAD': Input/output error

    此时之前执行 rclone 挂载命令那个 ssh session 中, 会提示
    2020/03/29 11:43:49 ERROR : openwrt/.git/tsjG3i7(0xc0004c4f40): failed to find cache file: object not found
    2020/03/29 11:43:49 ERROR : openwrt/.git/tsjG3i7(0xc0004c4f40): RWFileHandle.Release error: failed to find cache file: object not found

    求大佬们指导
    25 条回复    2020-03-30 18:30:20 +08:00
    xuerui911
        1
    xuerui911  
    OP
       2020-03-29 12:58:41 +08:00
    111
    xiri
        2
    xiri  
       2020-03-29 13:07:45 +08:00
    看了个开头就知道这帖不用看了
    首先,git clone 没有权限创建文件夹那你就在当前用户有权限的文件夹内操作啊(当前用户的家目录肯定是可以的)
    其次,rclone 这种网络挂载硬盘性能极低(本质上还是你每进行一次操作调用一次 onedrive 的 api ),编译这种高 io 操作有时候机械硬盘都嫌太慢了,你这却试图用 rclone 挂载的硬盘,,,,,,
    xuerui911
        3
    xuerui911  
    OP
       2020-03-29 13:18:10 +08:00
    @xiri 在 Windows 下用 raidrive 感觉速度还可以啊, rclone 跟 raidrive 原理不一样吗...
    learningman
        4
    learningman  
       2020-03-29 14:33:15 +08:00
    @xuerui911 速度是一回事,io 是一回事
    你下载一个文件,可能可以把带宽跑满,200M1000M 好像也不是不能用
    问题是编译时,可能一秒要创建上百个 4k 的小文件,每个文件对应的也是一次请求,你居然没被微软服务器拉黑也是挺奇怪的
    jim9606
        5
    jim9606  
       2020-03-29 14:42:26 +08:00
    我不知道你是有什么特殊目的用这种非官方仓库,openwrt 官方仓库地址是 https://github.com/openwrt/openwrt.git ,嫌慢的可以用码云的官方镜像 https://gitee.com/mirrors/openwrt.git

    大部分外部源码会在 make 的时候下载,建议自行准备梯子,建议使用 proxychains 工具,menuconfig 之后用 make download -j4 只执行源码下载,这样在 make 时候就不会等下载了

    不要使用任何网盘和网络文件系统,最好用 SSD

    还有为啥你会默认用 root 登录?你真的是用正常渠道装的 ubuntu 吗?除了 apt 之外所有操作都不应该用 root
    hxz0803
        6
    hxz0803  
       2020-03-29 14:51:47 +08:00
    这里的特殊目的可能是这个仓库里带了修改版(可能更好用)的科学软件,还有其他的官方源里没有的软件。毕竟一站式 make menuconfig 还是比学习如何编译安装非官方源软件要简单不少的
    Coioidea
        7
    Coioidea  
       2020-03-29 16:55:51 +08:00
    rclone 没有配置本地缓存的话是直接依赖你的网速的,你想想访问硬盘才几 ms,你这网络延迟就多少了。
    高密集 IO 还是硬盘来的踏实。
    @hxz0803 其实网上有好多已经编译的 ipk 包可以用的。
    seers
        8
    seers  
       2020-03-29 17:11:44 +08:00 via iPhone
    编程小白就别想着编译了,先拉个 op 官方 img 然后自己装 ipk 用,能解决 99%需求
    xuerui911
        9
    xuerui911  
    OP
       2020-03-29 21:25:38 +08:00 via iPhone
    @learningman
    我刚开始学 JAVA,我就把 Eclipse 的 Workspace 目录和 Idea 的 Projects 目录直接放在 Raidrive 挂载的 Onedrive 里了…用了一个月了,没感觉过卡啊…
    我本机配置是 9600K 锁 4.8G+32G DDR4 3000+PM981 512G,网络是联通 200M,不觉着卡是因为内存容量大速度快缓冲的多?而 VPS 配置太低就不行?
    ysc3839
        10
    ysc3839  
       2020-03-29 21:30:15 +08:00 via Android
    这个问题是个 X-Y 问题 https://coolshell.cn/articles/10804.html
    你编译的时候遇到了文件系统权限的问题,觉得可以改用 VPS 编译解决。但可能是 VPS 硬盘空间太小之类的问题,你选择使用 rclone “挂载” OneDrive 来解决空间不足的问题。
    然而你没想到你正面临着更麻烦的问题。OneDrive 不是“网络文件系统”,它不支持随机写入,只能顺序写入,这大概是 git unable to append 的原因。它还不支持 Unix 文件权限,很可能不支持大小写敏感,这都是构建 Linux 发行版的必要条件。
    所以你应该想办法解决文件系统权限的问题。你说出了问题的全貌,这一点做的很好,大部分提出 X-Y 问题的人不会说出问题的全貌,这使得别人更难帮他们分析、提供建议。
    xuerui911
        11
    xuerui911  
    OP
       2020-03-29 21:31:43 +08:00 via iPhone
    @jim9606 非 root 用户经常得输 sudo 很麻烦…我把 VMWare 开启后台运行网络设为桥接,点了启动就点叉然后就 ssh 了,ssh session 分别保存了 root 用户和普通用户,习惯性是用 root 用户。我现在还不是程序员没有生产环境,root 下玩瘫了就直接重装了…,
    xuerui911
        12
    xuerui911  
    OP
       2020-03-29 21:35:00 +08:00 via iPhone
    @jim9606 另外用那个非官方 OpenWrt 就是想用那里的 Passwall 插件,多节点自动切换…我用这个插件集成 Haproxy 负载均衡+V2R+Trojan
    xuerui911
        13
    xuerui911  
    OP
       2020-03-29 21:35:40 +08:00 via iPhone
    @hxz0803 是的我就是想用那里的 Passwall 插件,多节点自动切换…我用这个插件集成 Haproxy 负载均衡+V2R+Trojan
    xuerui911
        14
    xuerui911  
    OP
       2020-03-29 21:37:11 +08:00 via iPhone
    @Coioidea 呃这个 ipk 包分不分 x86 arm mips 啊,还是通用?
    xuerui911
        15
    xuerui911  
    OP
       2020-03-29 21:46:33 +08:00
    @ysc3839
    大神解释满分.
    我本地只有个 512 固态, 没有机械硬盘, 我想能省点空间就省点, 另外编译时间太长, 电脑风扇吵短时间还行,时间长了我很烦, 这也是我想在 VPS 编译上的一个主因.
    我的几个 VPS 硬盘基本都是 15G 到 30G 之间, 硬盘大点的肯定现阶段挂的网站也大点, 剩余空间都差不多, 我之前有过本地虚拟机一共 20G 编译多一半提示 no space left 的经历, 所以我才想用 rclone 挂载网盘.
    看来我的唯一出路就是再去买个大 SSD 的 VPS 去...
    mmtromsb456
        16
    mmtromsb456  
       2020-03-29 22:12:30 +08:00
    只是治标的话..可以在考虑好后果之后使用环境变量 FORCE_UNSAFE_CONFIGURE=1 来允许 root 用户进行编译
    ysc3839
        17
    ysc3839  
       2020-03-29 22:15:38 +08:00 via Android
    @xuerui911 关于你说的 Raidrive 不卡的情况,我不知道 Raidrive 的工作原理,不过 OneDrive 的 Windows 客户端是先把文件存在硬盘上,再同步到服务器的,卡不卡取决于本地硬盘的速度。而 rclone 我猜测不依赖本地硬盘做缓存很可能使用内存做缓存,而且有限制最大缓存容量,一旦缓存满了就得等待上传完才能继续写入。

    另外,既然你的内存比较大,想节省硬盘空间的话完全可以考虑在内存盘中编译,给虚拟机分配大一点的内存,然后上网找一下 Linux 手动挂载 tmpfs 的方法。如果不想每次编译都重新下载过所有文件的话,可以使用 source mirror,配合 nginx 搭建一个带缓存功能的反向代理。

    关于 source mirror,OpenWrt 的软件包一般不包含源代码,源代码是从软件最初发布的地方下载的,不仅仅支持 tar 包,还能从 git svn 等版本管理系统中下载源代码。tar 包是一个单独的文件,能直接缓存,git 等版本管理系统却无法缓存,OpenWrt 的编译系统会在下载源代码之后重新打包成 tar 缓存。
    OpenWrt 官方编译时缓存的包会放到 https://sources.openwrt.org ,编译前设置环境变量 export DOWNLOAD_MIRROR=https://sources.openwrt.org 让它优先选择缓存的包。
    不过你使用的是修改过的 OpenWrt,里面包含官方没有的包,你可以在第一次编译成功后把生成的 tar 包拷出来 (我忘了在哪个文件夹了)。
    xuerui911
        18
    xuerui911  
    OP
       2020-03-29 22:28:58 +08:00 via iPhone
    @ysc3839 我本地硬盘是 PM981 512G,NVME 协议的应该是算比较快的,可能编译简单程序不卡就是这原因吧…
    后边看着看着就有点看不懂了呢😂容我消化消化…
    我本科环境工程,毕业就进了某市政类国企,感觉工作环境有点差吧但回想回想又好像大多是行政类的活用不上什么专业技能…混日子混了两年了刚裸辞,年根底下报了个全程线下的大数据的培训机构,赶上新冠肺炎没法开课…我现在还是真的小白…
    xuerui911
        19
    xuerui911  
    OP
       2020-03-29 22:32:11 +08:00 via iPhone
    @mmtromsb456 这个可以试试! Rclone 需要用 root,编译不让用 root,两个冲突又得两个同时用,哪个好改改哪个!
    learningman
        20
    learningman  
       2020-03-29 22:36:23 +08:00
    @xuerui911 这里的限制是微软定的,你的代码目录能有几个文件。。。IO 级别就是普通读写
    learningman
        21
    learningman  
       2020-03-29 22:37:27 +08:00
    @xuerui911 编译和硬盘读写关系不大,只要不是上世纪的 IDE,基本都能编译出来,只是时间问题
    jim9606
        22
    jim9606  
       2020-03-30 00:20:06 +08:00
    @xuerui911 关于频繁 sudo 的问题,虽然 sudo 要求密码但输过一次在几分钟内反复 sudo 是不用输密码的,实在烦的可以 visudo 修改配置允许无密码 sudo,但不要养成用 root 做日常工作的坏习惯,编译 openwrt 这个过程中除了安装软件包外,包括克隆仓库等操作都应该用非 root 用户。如果你用虚拟机安装时无论是 desktop 还是 server 都会在安装向导指引创建一个有 sudo 权限的用户的。
    编译速度的话只要是 SSD 问题都不大,make -j4 这样允许 4 线程编译,线程数建议等于 cpu 核心数,如果出错再用 make -j1,可以节省一点时间(排除卡网络的问题)
    如果想跳过下载源码可以这样,在 VPS 配置好后运行 make download -j4 下载源码,然后把 dl 目录单独拉回本地
    xuerui911
        23
    xuerui911  
    OP
       2020-03-30 10:32:16 +08:00 via iPhone
    @jim9606 受教了
    ipixeloldc
        24
    ipixeloldc  
       2020-03-30 13:33:35 +08:00 via iPhone
    那么多 CI,有免费套餐....你直接用他们不就行了,编译个 openwrt 够用
    xuerui911
        25
    xuerui911  
    OP
       2020-03-30 18:30:20 +08:00
    @ipixeloldc 求明示 CI 全称是啥...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3315 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:43 · PVG 08:43 · LAX 16:43 · JFK 19:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.