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

Lak*_*ash 24 snap 18.04

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

Muh*_*suf 26

更改 snaps 安装目录

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

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

第二种解决方案是使用已安装的应用程序对我来说很好用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 the System !!!
##############################################################################
##Move snap folder to Home instead of root.
#Create the directory : you can change the location
mkdir -p /home/$USER/snap/snapd

#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
##############################################################################
# Take care the previous section may break the System !!!
##############################################################################
Run Code Online (Sandbox Code Playgroud)

参考

  1. 某些快照问题的自定义磁盘位置
  2. 问 ubuntu 问题(不是最佳解决方案)链接
  3. 建议在移动快照目录中使用绑定安装而不是符号链接链接
  4. 绑定挂载和符号链接的区别Link
  5. 使绑定安装永久

  • 对我来说效果很好。谢谢你!我只需在将 /var/lib/snapd 目录移动到 .bak 后(重新)创建 /var/lib/snapd 目录即可让 mount -a 工作 (3认同)
  • 从风险角度来看,在 Rsync 行为期间 Snapcraft 是否处于活动状态(https://askubuntu.com/questions/1045542/how-to-stop-snapd-from-auto-updating)有关系吗?Snap 不提供可预测的时序,并且可以在并行 (r) 同步期间推送随机更新,从而在重要的边缘情况下导致灾难性的数据丢失?我在 https://askubuntu.com/review/suggested-edits/1167854 上编辑了脚本,之前使用了 `sudo systemctl mask/stop/disable snapd.service`,之后使用了 `sudo systemctl unmask/start/reenable snapd.service`,非常谨慎。 (2认同)

Lak*_*ash 12

我找到了这个方法...

  • 首先将 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. 重新启动你的机器,你就完成了。