我正在 Debian 9 系统上工作。当我尝试安装软件包时,dpkg
失败并出现以下错误:
Selecting previously unselected package mariadb-server-10.1.
Preparing to unpack .../3-mariadb-server-10.1_10.1.38-0+deb9u1_amd64.deb ...
/var/lib/mysql: found previous version 10.1
ERROR: There's not enough space in /var/lib/mysql/
dpkg: error processing archive /tmp/apt-dpkg-install-ShVFUI/3-mariadb-server-10.1_10.1.38-0+deb9u1_amd64.deb (--unpack):
这是df -h
:
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 791M 9.1M 782M 2% /run
/dev/sda2 55G 9.8G 43G 19% /
tmpfs 3.9G 158M 3.8G 4% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda1 511M 132K 511M 1% /boot/efi
/dev/sda5 844G 540G 261G 68% /home
/dev/sda3 9.2G 8.7G 32K 100% /var
tmpfs 791M 12K 791M 1% /run/user/1001
fdisk -l
输出:
Disk /dev/sda: 931.5 GiB, Disklabel type: gpt
Disk identifier: AAF695F1-3DA1-4E89-86F4-59439A75BCBB
Device Start End Sectors Size Type
/dev/sda1 2048 1050623 1048576 512M EFI System
/dev/sda2 1050624 118237183 117186560 55.9G Linux filesystem
/dev/sda3 1933993984 1953523711 19529728 9.3G Linux filesystem
/dev/sda4 1917392896 1933993983 16601088 7.9G Linux swap
/dev/sda5 118237184 1917392895 1799155712 857.9G Linux filesystem
如何移动/var
到宽敞的分区(如果可能的话)?或者,如何将大小增加到/dev/sda3
30G?
答案1
您的文件系统位于磁盘分区上,而不是lvm(逻辑卷管理)或其他灵活的配置系统上,因此我建议不要尝试移动/调整分区大小,这太棘手且风险太大。
关于移动/var
到另一个分区:
第一个解决方案
由于根文件系统上有相当多的可用空间,因此/
您可以移/var
回它。不幸的是,当系统运行时,/var 无法被卸载或修改。我的建议是使用 USB 驱动器或 CD 上的救援实时 Linux 发行版来启动系统,例如gparted,打开 shell 并或多或少遵循以下准则修改硬盘上的系统设置:
mkdir /tmp/root
mkdir /tmp/var
# mount the filesystems
mount /dev/sda2 /tmp/root
mount /dev/sda3 /tmp/var
# copy everything in /var
# do not forget the / after var in /tmp/var/
rsync -aHXA /tmp/var/ /tmp/root/var
然后,使用文本编辑器注释掉#
或删除静态挂载列表中与 /dev/sda3 /var 相关的行/tmp/root/var/etc/fstab
。请注意,在实时系统中,设备可能与主系统中的设备不同,因此sda
可能会出现问题sdb
,请在进行任何修改之前检查。
修改后 /dev/sda3 是一个未使用的分区,有可用空间。
第二种解决方案
如果您预见到下面的空间需求/var/
主要来自 mariadb 包和所有相关的数据库文件,那么明智的做法是安装第二个硬盘驱动器或 SSD 并仅移动/var/lib/mysql
该磁盘/分区上的目录。在这种情况下,您不需要停止系统并从另一个发行版启动来移动数据,而只需停止 mariadb 服务(如果已经安装并处于活动状态)。
从您的帖子中不清楚您是否已经安装了包含珍贵文件的 mariadb 或 mysql 软件包/var/lib/mysql
,因为一方面我们看到Selecting previously unselected package mariadb-server-10.1.
,另一方面/var/lib/mysql: found previous version 10.1
。假设你已经有一个,那么:
# prepare and format somehow a new disk/partition, let's call it $MYSQLDEV
# mount it in a temporary place
mkdir /tmp/mysql
mount $MYSQLDEV /tmp/mysql
# copy existing data on new partition
rsync -aHXA /var/lib/mysql /tmp/mysql
# if you are really sure you have copied everything,
# type with care and double check
rm -rf /var/lib/mysql/*
# mount filesystem in the final position
umount $MYSQLDEV
rm -f /tmp/mysql
mount $MYSQLDEV /var/lib/mysql/
之后,您应该在 yout 文件中添加一行,告诉系统必须在每次启动时安装新分区,通过替换并假设您将其格式化为 ext4 格式,/etc/fstab
它看起来或多或少像这样:$MYSQLDEV
$MYSQLDEV /var/lib/mysql ext4 defaults 1 2