linux docker存储空间迁移

​​1、查看分区状况

根目录在/dev/mapper/centos-root

复制代码

执行以下命令,可查看各文件夹空间占用情况:

du -h -x --max-depth=1

 

以下是两种不同的实现方法来在Linux中查找大文件的代码:

方法一:使用find命令

shell
find /var -type f -size +100M

这个命令将在指定路径下搜索大于100兆字节的文件。你可以将/path/to/search替换成你要搜索的实际路径。

方法二:使用du和sort命令组合

shell
du -ha /var | grep '[0-9]G\|[0-9]M' | sort -rh

这个命令将在指定路径下计算每个文件的大小,并以人类可读的方式显示。然后使用grep过滤只保留大于1兆字节的文件,并通过sort按照降序排列文件大小。你可以将/var替换成你要搜索的实际路径。

这里有两种不同的方法来查找大文件,你可以根据具体情况选择适合的方法。

方法二:使用du和sort命令组合获取大于100兆的文件

du -ha /var | awk '/[0-9]G|[0-9][0-9][0-9]M/ && $1 > 100' | sort -rh

这里使用了`awk`命令来过滤出文件大小大于100兆的行。正则表达式`/[0-9]G|[0-9][0-9][0-9]M/`匹配大于100兆的文件大小,`$1 > 100`表示第一列的文件大小必须大于10。然后再使用`sort -rh`对结果按文件大小进行降序排序。

注意,这个命令假设你正在查找/var目录下的文件大小,并且文件大小以G和M为单位。如果你想查找其他目录或使用不同的文件大小单位,需要相应地修改命令中的路径和正则表达式。





[root@oracledb ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 893M 0 893M 0% /dev tmpfs 910M 316M 594M 35% /dev/shm tmpfs 910M 11M 900M 2% /run tmpfs 910M 0 910M 0% /sys/fs/cgroup /dev/mapper/centos-root 27G 27G 864K 100% / /dev/sda1 1014M 220M 795M 22% /boot tmpfs 182M 8.0K 182M 1% /run/user/42 overlay 27G 27G 864K 100% /var/lib/docker/overlay2/2461bbc6acac240c76f3aab098779afae24c5a5dd690454d4c6b579686ed5329/merged tmpfs 182M 0 182M 0% /run/user/0 [root@oracledb ~]#
复制代码
复制代码
[root@oracledb ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   65G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   29G  0 part 
  ├─centos-root 253:0    0   27G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sr0              11:0    1  4.3G  0 rom  

 

1.查看docker镜像存放目录空间大小

  1. du -hs /var/lib/docker/

2.停止docker服务。

  1. systemctl stop docker

3.查看磁盘容量大的空间,且在上面创建新的docker目录。

  1. df -h
  2. mkdir -p /mnt/www/docker/lib

4.迁移/var/lib/docker目录下的文件到新创建的目录/mnt/www/docker/lib

  1. rsync -avz /var/lib/docker /mnt/www/docker/lib

5.编辑 /etc/docker/daemon.json 添加如下参数

  1. {
  2. "graph": "/mnt/www/docker/lib/docker"
  3. }

 

https://mirror.ccs.tencentyun.com
http://registry.docker-cn.com
http://hub-mirror.c.163.com


{

"registry-mirrors": ["https://oenttmu4.mirror.aliyuncs.com"],
"log-driver":"json-file",
"log-opts": {"max-size":"85g", "max-file":"5"},
"graph": "/mnt/www/docker/lib/docker"
},
{
"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
"log-driver":"json-file",
"log-opts": {"max-size":"85g", "max-file":"5"},
"graph": "/mnt/www/docker/lib/docker"
},
{
"regustry-mirrors": ["htts://docker.mirrors.ustc.edu.cn"],
"log-driver":"json-file",
"log-opts": {"max-size":"85g", "max-file":"5"},
"graph": "/mnt/www/docker/lib/docker"
}

 

max-size=85g,意味着一个容器日志大小上限是85g, max-file=5,意味着一个容器最多可以有五个日志,分别是iid+1.json、id+2.json、id+3.json、id+4.json、id+5.json。

6.重新加载docker,并重启docker服务。

  1. systemctl daemon-reload && systemctl restart docker

systemctl daemon-reload

systemctl restart docker.service

systemctl status docker.service

 

7.检查docker是否变更为新目录/mnt/www/docker/lib

  1. [root@localhost ~]# docker info
  2. ...
  3. Docker Root Dir: /mnt/www/docker/lib/docker
  4. Debug Mode (client): false
  5. Debug Mode (server): false
  6. Registry: https://index.docker.io/v1/
  7. ...

8.删掉docker旧目录

  1. rm -rf /var/lib/docker

常见docker清理方法

docker system df 类似于Linux上的df命令,用于查看Docker的磁盘使用情况:

docker system prune 可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。

docker system prune -a 清理得更加彻底,可以将没有容器使用Docker镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了…所以使用之前一定要想清楚.。我没用过,因为会清理 没有开启的 Docker

 

问题

故障分析
Docker 有两个服务进程文件,可以通过cd /lib/systemd/system/ && ll|grep docker查看,分别是docker.service unit file 和 docker.socket unit file,上面的警告意味着如果你试图停止docker服务,但docker.socket unit file还处于激活状态。

解决方法
停止 docker socket
# 停止 docker 服务
sudo systemctl stop docker.socket
sudo systemctl stop docker.service

# 启动 docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker.service

删除 docker socket 文件
如果上面”温和“方法并没有解决你的问题,我们可以采用下面”暴力“方法。

# 删除 docker socket 文件
cd /lib/systemd/system/ && rm -rf docker.socket
# 查看 docker 状态,已dead
sudo systemctl status docker.service
# 重新创建 docker.socket
cd /lib/systemd/system/
vim docker.socket
# 添加如下内容
[Unit]
Description=Docker Socket for the API
PartOf=docker.service

[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target

# 重启 docker
sudo systemctl daemon-reload
sudo systemctl restart docker.service

此时,再进行 docker 相关操作,比如:停止、启动、重启,均可正常执行。

 

 

1. 容器日志文件默认存放路径: /var/lib/docker/docker日志文件后缀是container ID + "-json.log",   

     查看各个日志文件大小:

     1) ls -lh $(find /var/lib/docker/containers/ -name *-json.log)   

          查询结果sample:  -rw-r----- 1 root root 2.0G Jun 28 22:47 /var/lib/docker/containers/

     2)find /var/lib/docker/containers/ -name *-json.log |xargs du -sh

          查询结果sample : 796K    /var/lib/docker/containers/

2. 清理容器日志文件方式:

     2.1  rm -rf filepath 需重启Docker后才能生效

             在Linux/Unix系统中通过rm命令 or 文件管理器删除文件,只是将文件从文件系统的目录结构上解除链接unlink,如果文件是被打开的(有一个进程在使用),那么进程仍然可以读写该文件,磁盘空间也一直被占用

     2.2 cat /dev/null > logfilepath 立即生效无需重启Docker,比如: cat /dev/null > *-json.log

3. 使用Docker镜像创建容器时,docker会创建一些目录,如:

     /var/lib/docker/containers/容器ID,如果容器使用了默认的日志模式,那么该容器的日志会以JSON形式保存在此目录 下。

    /var/lib/docker/overlay2 , 该目录包含容器的读写层,如果容器使用了自己的文件系统保存了数据,这些数据就会写到此目录下。

4. 查看Docker各类型文件占用空间情况,docker类型包括4种:Images 、 Containers、 Local Volumes、Build Cache   **RECLAIMABL 这个字段明确了该类型中可以清理的空间**

    docker system df

5. 查看docker容器的日志

    docker logs -f 容器名称

6. 查看Linux 各目录使用磁盘空间情况,

    按文件大小排序显示前20个文件 : du -a / | sort -n -r | head -n 20

    按文件大小排序显示后20个文件 : du -a / | sort -n -r | -n 20

 7. 只查询当前目录下各文件大小

     du -h --max-depth=1

posted @ 2023-01-20 10:54  全琪俊  阅读(464)  评论(1编辑  收藏  举报