AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1029562
Accepted
Lakindu Akash
Lakindu Akash
Asked: 2018-04-29 23:17:53 +0800 CST2018-04-29 23:17:53 +0800 CST 2018-04-29 23:17:53 +0800 CST

将快照包移动到另一个位置/目录

  • 772

我想将已安装的 snap 包移动到主目录。Snap 包比 .deb 包稍大,因此它们在我的根分区中占用空间。我知道包位于/var/lib/snapd/snaps并且他们正在将包安装到/snap/app_dir. 我试图simlinked,但它没有工作。

snap 18.04
  • 5 5 个回答
  • 28388 Views

5 个回答

  • Voted
  1. Muhammad Yusuf
    2018-08-31T12:40:27+08:002018-08-31T12:40:27+08:00

    更改 snaps 安装目录

    这是许多人要求的常见问题。似乎 snap 开发人员不打算很快解决它,因此提出了一些解决方案。

    第一个被社区强烈拒绝但我没有尝试的解决方案是使用符号链接来链接导致快照的目录。这种方法似乎不起作用,因为社区回复说 AppArmor 不适用于符号链接。

    第二个解决方案是对我来说已经安装的应用程序工作正常但无法安装新应用程序的mount --bind目录/val/lib/snapd/snaps,因为我正在将目录移动到另一个分区。这给了我一个关于将 snap 应用程序与位于/var/lib/snapd/cache. 我不知道如果该位置是否在同一个分区中,此解决方案是否可行;但这就是为什么我要移动 snap 目录以将一些空间从分区释放到另一个分区的原因。

    第三个也是可行的选项是将/var/lib/snapd目录作为一个整体移动,然后mount --bind从另一个位置移动到它,这对我有用,这里是步骤。

    只是一个小提示,您已经知道,在以下步骤中完成 rsync 后,您可以将里面的数据备份/var/lib/snapd到另一个位置,直到整个过程成功完成,然后如果您想释放更多空间,您可以删除备份数据但是保持/var/lib/snapd目录本身甚至是免费的,因为它被挂载点使用。

    ##############################################################################
    # Take Care this section may break your System !!!
    ##############################################################################
    ##Move snap folder to Home instead of root.
    #Create the directory : you can change the location
    mkdir -p /home/$USER/snap/snapd
    
    #Stop auto-updating (will *not* crash snaps already open)
    sudo systemctl mask snapd.service
    sudo systemctl stop snapd.service
    sudo systemctl disable snapd.service
    
    #Copy the data
    sudo rsync -avzP /var/lib/snapd/  /home/$USER/snap/snapd/
    
    #Do backups
    sudo mv /var/lib/snapd /var/lib/snapd.bak
    sudo cp /etc/fstab /etc/fstab.bak
    
    #Change fstab (Change $USER with your name or change the path totally)
    echo "/home/$USER/snap/snapd /var/lib/snapd none bind 0 0" | sudo tee -a /etc/fstab
    
    #remount fstab Or reboot.
    sudo mkdir /var/lib/snapd
    sudo mount -a
    
    if ls  /var/lib/snapd/ | grep snaps
    then
        echo "Re-mounting snapd folder is done successfully. !!!!"
        sudo rm -rf /var/lib/snapd.bak
    else
        echo "WARNING : Re-mounting snapd folder failed, please revert !!!!! "
        echo "WARNING : Re-mounting snapd folder failed, please revert !!!!! "
        echo "WARNING : Re-mounting snapd folder failed, please revert !!!!! "
        echo "WARNING : Re-mounting snapd folder failed, please revert !!!!! "
        echo "WARNING : Re-mounting snapd folder failed, please revert !!!!! "
    
        # Trying to revert automatically
        sudo cp /etc/fstab.bak /etc/fstab
    
        sudo mount -a
        sudo umount /var/lib/snapd
    
        sudo mv /var/lib/snapd.bak /var/lib/snapd
    
        echo "Files located at ~/snap/snapd should be removed, but are kept for
        recovery until you, manually reboot the system and make sure the service
        is running correctly. Then you can manually remove the folder ~/snap/snapd
        !!!!!!!!!!!!!!, you should do that manually."
    
    fi
    
    #Restart auto-updating
    sudo systemctl unmask snapd.service
    sudo systemctl start snapd.service
    sudo systemctl reenable snapd.service
    
    ##############################################################################
    # Take care the previous section may break your System !!!
    ##############################################################################
    

    参考

    1. 某些快照问题的自定义磁盘位置
    2. 问 ubuntu 问题(不是最佳解决方案)链接
    3. 在移动 snap 目录中使用绑定挂载而不是符号链接的建议Link
    4. 绑定挂载和符号链接的区别Link
    5. 使绑定挂载永久化
    • 33
  2. Best Answer
    Lakindu Akash
    2018-04-30T21:13:04+08:002018-04-30T21:13:04+08:00

    我找到了这种方式...

    • 首先将 snap 包移动到所需位置。让snap_app.snap作为您要移动的应用程序。将包从/var/lib/snapd/snaps/snap_app.snap移至~/snaps/snap_app.snap。
    • 然后您必须更改安装选项/etc/systemd/system/snap-snap_app-90.mount,文件名中的数字可能会有所不同。它What=/snap_app_loaction在[Mount]. 将其更改为新的 snap 包位置。
    • 最后,您必须将 snap 包符号链接到/var/lib/snapd/snaps/.
      前任: ln -s ~/snaps/snap_app.snap /var/lib/snapd/snaps/snap_app.snap

    Snap 包最初是挂载到/snap/snap_app目录中的。你可以用mount. 重新启动你的机器,你就完成了。

    • 12
  3. BlackBeardie
    2021-01-26T03:41:59+08:002021-01-26T03:41:59+08:00

    我的 VLC Player snap 体验

    要求。我想将 VLC snap 安装从一个 Ubuntu 18.04 系统“克隆”到另一个。原因。有限的互联网限额和带宽。

    我按照@Lakindu-Akash 编写的步骤进行操作。谢谢你。这为我进入 snap 安装世界提供了一个很好的起点。我发现我有重复的 VLC 快照。见下文。

    已清理 1) /snap/vlc$ ls 1620 1700 当前 /snap/vlc$

    1700是当前的。我删除了 1620 目录和内容。

    2)在 /etc/systemd/system$ 我有 snap-vlc-1620.mount snap-vlc-1700.mount

    所以我在这里删除了1620名词。

    /etc/systemd/system$ sudo rm snap-vlc-1620.mount

    3) 在 /var/lib/snapd/snaps$

    我有 -rw------- 1 根 305086464 8 月 00 日 00:00 vlc_1620.snap -rw------- 1 根 304545792 2020 年 7 月 15 日 vlc_1700.snap

    我在这里删除了 vlc_1620.snap,它是实际的 snap 下载文件。

    /var/lib/snapd/snaps$ sudo rm vlc_1620.snap

    1. 在新系统上将文件和目录复制到新系统,保持相同的位置不起作用。我没有手动尝试创建新的挂载点。如果我这样做了,也许它会起作用。

    在阅读了snap 论坛后,谢谢@adam-monsen,我决定从位于 /var/lib/snapd/snaps$ 中的 snap 文件进行安装,其中实际下载的 VLC snap 文件是而不是 inode(指针) .

    我将 vlc_1700.snap 复制到新机器并从该目录中运行命令

    sudo install snap vlc_1700.snap --dangerous

    其中 vlc_1700.snap 是快照的名称(图像或您所称的)显然此安装将永远不会更新,因为我没有使用确认号?我必须了解 ack 及其用法。但是安装很顺利,VLC 可以在新系统上运行。如果您也想在同一台机器上重新安装到不同的位置,我会冒险说这可能会有所帮助。这是因为新的快照映像是在安装快照映像所在的目录中创建的,并且已启动安装进程。

    • 1
  4. prosody-Gabe Vereable Context
    2021-09-08T12:51:57+08:002021-09-08T12:51:57+08:00

    在您移动文件夹之前,请注意并警告有活动的重型机械(活动目录)带有移动部件,您需要在采取任何行动之前仔细观察。

    www.Snapcraft.io在传输过程中让用户措手不及的风险是数据丢失的灾难性失败,因为对同一数据运行多个同步进程,如果它破坏 MySQL(一直在云数据中心),肯定会也破坏用户。

    “屏蔽/停止/禁用”在您触摸任何东西之前,请使用以下命令:

    # Stop "auto-upgrade"/"auto-update" Snapcraftiness
    sudo systemctl mask snapd.service
    sudo systemctl stop snapd.service
    sudo systemctl disable snapd.service
    

    *不会使已打开的快照崩溃。

    确定一切正常后,恢复正常设置:

    # Start back the "autoupgrade"/"autoupdate" Snapdiness
    sudo systemctl unmask snapd.service
    sudo systemctl start snapd.service
    sudo systemctl reenable snapd.service
    

    鉴于如何停止 snapd 自动更新所代表的挫伤和恐怖,所有 3 个命令“MASK/STOP/DISABLE”都是必需的?答案,这表明没有一个人可以权威地谈论如何解决这个问题。就像我在这里回答的问题一样,一个简单的移动操作、阻止 snapcraft 变得狡猾的超现实的耗时和不可预测的努力是一个障碍。

    我评论了将快照包移动到另一个位置/目录“风险方面,如果 Snapcraft 在 Rsync 行为期间 [is] 处于活动状态(如何停止 snapd 自动更新?),这有关系吗?Snap 不能提供可预测的时间,并且可以推送随机更新在这个并行(r)同步期间,在那个重要的边缘情况下会导致灾难性的数据丢失吗?我在 askubuntu.com/review/suggested-edits/1167854 之前使用 sudo systemctl mask/stop/disable snapd.service 和 sudo 编辑了脚本systemctl unmask/start/reenable snapd.service 之后,非常谨慎。”

    最初来自我在https://askubuntu.com/review/suggested-edits/1167854和https://askubuntu.com/review/suggested-edits/1168074的编辑,可以预见的是,第一个没有被批准,因为我说“Snapcraftiness”描述自动更新机制的恐怖狡猾和腐败。(我们从当之无愧的apt-get到 snap/ snapcraft,它本可以被称为“ snapt”而不是为了表示敬意,有人认为 ever-so-witty “ snapcraft”是一个更好的描述,所以我认为我的措辞Snapcraftiness准确地说是最好的合适和适当的编码。

    我已经使用计算机 25 年了,我遇到程序问题的第一年是安装 Snapcraft.io 并发现它升级了软件,这并没有带来任何改进,并导致服务提供商当面否认的服务质量下降大量用户证据。有一天,我发现这比错误更深层次,几乎是一种黑客攻击,完全没有正式标准化,可以描述为普通/普通用户的固有风险。

    当多个数据操作提交到相同的数据点时,这些类型的风险会损坏数据、损坏硬盘驱动器,甚至损坏整个数据中心服务器,如果存在重叠活动,可能会破坏物理数据存储,这将成为一个物理问题,如果不仅会导致软件数据损坏问题,有时也称为“竞争条件” (https://en.wikipedia.org/wiki/Race_condition,https://simple.wikipedia.org/wiki/Race_condition,https://stackoverflow 。com/questions/34510/what-is-a-race-condition)在程序员社区中类似,如果不仔细观察的话。

    我从发生这些问题的个人经验说起,并阅读了其他人的经验,这些经验处理了一些软件/存储库公然运行的无知方式的后果,而没有牢记这些有风险的用户。

    • 1
  5. alchemy
    2022-03-18T18:46:31+08:002022-03-18T18:46:31+08:00

    我正在使用 ntfs 分区并且必须更改挂载选项以解决此错误:

    UUID=0952DA6E1534D154   /media/user/progs       ntfs-3g    uid=1000,gid=1000,umask=022,permissions 0       2
    /media/user/progs/snapd /var/lib/snapd none bind 0 0
    #UUID=0952DA6E1534D154  /media/user/progs       ntfs-3g uid=1000,gid=1000,nls=iso8859-1,umask=022,permissions   0       2
    #/media/user/progs/snapd /var/lib/snapd none bind,fmask=0022,dmask=0022 0 0
    

    我减少了注释掉的条目,直到它仍然有效,但没有对其进行太多测试。

    有关的:

    如何在 NTFS(或 FAT32)分区上使用“chmod”?

    启动时挂载 NTFS 分区,以非 root 用户为所有者


    systemctl mask snapd && systemctl stop snapd && systemctl disable snapd 
    # output: "Unit /etc/systemd/system/snapd.service is masked, ignoring."
    
    rsync -aAX --info=progress2 /var/lib/snapd /media/user/progs/ #(or use `mv` and use `progress -w` afterward)
    mv /var/lib/snapd /var/lib/snapd0
    mkdir /media/user/progs/snapd
    mount -a
    
    systemctl unmask snapd && systemctl start snapd && systemctl reenable snapd
    
    systemctl status snapd
    snap info core
    
    rm -R /var/lib/snapd0
    

    用于systemctl daemon-reload在 /etc/systemd/system 中重新加载 snap mount 单元文件。或apt purge snapd清除它们并重新安装所有内容。

    • 0

相关问题

  • Ubuntu可以在哪里快照写入数据?

  • 我可以从 Evince 拖放到 Thunderbird 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve