标签: tmpfs

docker-compose tmpfs无效

我有一个docker-compose文件,我试图通过使它创建的容器的根卷只读来保护.

相关部分docker-compose.yml:

version: '2'
services:
  mysql:
    image: mariadb:10.1
    read_only: true
    tmpfs:
    - /var/run/mysqld:uid=999,gid=999
    - /tmp
    volumes:
    - mysql:/var/lib/mysql
    restart: always
volumes:
  mysql:
Run Code Online (Sandbox Code Playgroud)

麻烦的是,tmpfs没有被创造.如果我运行使用容器的一个实例docker-compose run --rm mysql /bin/bash,该/var/run/mysqld目录仍然是只读的,尽管tmpfs条目,任何企图touch /var/run/mysqld/foo将失败.由于这是MySQL放置其socket和pid文件的地方,这导致整个事情失败.我不确定为什么这个tmpfs条目在这种情况下不起作用.

mysql_1    | 2017-01-27 20:53:45 140515784030144 [Note] mysqld (mysqld 10.1.21-MariaDB-1~jessie) starting as process 1 ...
mysql_1    | 2017-01-27 20:53:45 140515784030144 [Note] InnoDB: Using mutexes to ref count buffer pool pages
mysql_1    | 2017-01-27 20:53:45 140515784030144 [Note] InnoDB: The InnoDB …
Run Code Online (Sandbox Code Playgroud)

tmpfs docker-compose

13
推荐指数
2
解决办法
1万
查看次数

docker tmpfs 似乎对 postgresql 没有影响

我在运行 django 测试的 docker 容器中有一个 Postgres 数据库。我想提高测试的速度。最简单的方法(在我看来)是将 postgres 数据移动到 tmpfs 卷中。

这是我所做的:

docker run --name my_tfmps_test -d -p 5432:5432 \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=postgres \
-e POSTGRES_DB=my_database \
-e PGDATA=/var/lib/postgresql/data \
--tmpfs /var/lib/postgresql/data \
library/postgres
Run Code Online (Sandbox Code Playgroud)

因为我指定了--tmpfs我希望测试运行得更快。不幸的是,这种情况并非如此。测试的速度保持完全相同的水平(给予或接受 5%)。

我的问题是:为什么测试速度没有改变?我该怎么办?

额外信息:

django postgresql tmpfs docker

7
推荐指数
1
解决办法
1710
查看次数

scala-io,从tmpfs移动文件太慢了

我遇到了一个奇怪的scala-io moveTo方法问题.这是我的文件系统,tmp目录位于ram中.

~ % df -Th                                                               ~/ :)
Filesystem     Type      Size  Used Avail Use% Mounted on
rootfs         rootfs    112G   18G   89G  17% /
/dev           devtmpfs  3.9G     0  3.9G   0% /dev
run            tmpfs     3.9G  236K  3.9G   1% /run
/dev/sda       btrfs     112G   18G   89G  17% /
shm            tmpfs     3.9G  872K  3.9G   1% /dev/shm
tmpfs          tmpfs     3.9G   34M  3.9G   1% /tmp

将文件从tmp主目录移动到主目录或向后移动时,首先它的速度很慢(主观上约为1M/s,而iotop显示为1500M/s),其次是100%的CPU负载.在同一文件系统中移动文件时,一切都按预期工作.

Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_03).
Type …
Run Code Online (Sandbox Code Playgroud)

scala tmpfs

6
推荐指数
1
解决办法
647
查看次数

在bash中查找重复文件的时间复杂性

我今天必须编写一个Bash脚本来删除重复文件,使用它们的md5哈希值.我将这些哈希值存储为临时目录中的文件:

for i in * ; do
    hash=$(md5sum /tmp/msg | cut -d " " -f1) ;
    if [ -f /tmp/hashes/$hash ] ;
    then
        echo "Deleted $i" ;
        mv $i /tmp/deleted ;
    else
        touch /tmp/hashes/$hash ;
    fi ;
done
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但让我想知道:这是一种节省时间的方法吗?我最初想过将MD5哈希存储在一个文件中,但后来我想"不,因为检查给定的MD5是否在这个文件中需要每次都重新读取它".现在,我想知道:使用"在目录中创建文件"方法时它是一样的吗?当同一目录中有大量文件时,Bash [-f]是否检查线性或准常量复杂度?

如果它取决于文件系统,那么tmpfs的复杂性是多少?

bash time-complexity tmp tmpfs

6
推荐指数
1
解决办法
611
查看次数

Linux 中进程之间的 write(2)/read(2) 原子性

我有一个案例,有两个进程作用于同一个文件 - 一个作为写入器,一个作为读取器。该文件是一行文本文件,编写器在循环中重写该行。读者阅读该行。伪代码如下所示:

写入程序

char buf[][18] = {
"xxxxxxxxxxxxxxxx",
"yyyyyyyyyyyyyyyy"
};
i = 0;
while (1) {
 pwrite(fd, buf[i], 18, 0);
 i = (i + 1) % 2;
}
Run Code Online (Sandbox Code Playgroud)

读者进程

while(1) {
  pread(fd, readbuf, 18, 0);
  //check if readbuf is either buf[0] or buf[1]
}
Run Code Online (Sandbox Code Playgroud)

运行这两个进程一段时间后,我可以看到readbufxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyxx

我的理解是对于最大 512 字节的写入将是原子的。但从我的实验来看,原子性似乎只针对 16 个字节。

手册页没有提及任何关于普通文件的原子性,它只提到了 512 字节的管道原子性。

我已经用 tmpfs 和 ext4 尝试过,结果是相同的。使用O_SYNCext4 写入变得原子,我理解它,因为写入在到达磁盘之前不会返回,但O_SYNC对 tmpfs ( ) 没有帮助/dev/shm

linux filesystems tmpfs

6
推荐指数
1
解决办法
2625
查看次数

docker/docker-compose tmpfs - pgsql_tmp 目录

有没有人尝试过运行 postgresql 容器并将 tmpfs 卷挂载到 pgsql_tmp?(我想象的任何具有临时文件目录的数据库)

\n\n

有没有引起什么问题?

\n\n

这是一个坏主意吗?

\n\n

其他有用信息?

\n\n

docker tmpfs- “与卷和绑定挂载相反,tmpfs 挂载是临时的,仅保留在主机内存中。当容器停止时,tmpfs 挂载将被删除,写入其中的文件将不会被保留\xe2\x80\x99。 ”

\n\n

pgsql_tmp- “临时文件(用于对超出内存容量的数据进行排序等操作)在 PGDATA/base/pgsql_tmp 中创建,或者在表空间目录的 pgsql_tmp 子目录中创建(如果为其指定了 pg_default 以外的表空间)。临时文件的格式为 pgsql_tmpPPP.NNN,其中 PPP 是所属后端的 PID,NNN 区分该后端的不同临时文件。”

\n\n

将此发布出来供社区参考和研究。感谢您的帮助。

\n\n

曾多次经历过人工数据库填充 inode 的情况。重新启动堆栈后,必须手动删除 tmp 文件,这花了大约一个小时。

\n

postgresql tmpfs docker

6
推荐指数
1
解决办法
1423
查看次数

运行整个 docker 容器,并将卷安装在内存中

我想在内存中运行整个 docker 容器,而不将卷映射到主机的硬盘驱动器。

此处描述的 TMPFS有助于将卷安装为“内存卷”,但我正在寻找一种方法来启动映射到内存的整个容器。

--volume-driver可能是我必须使用的,但我找不到支持的驱动程序的文档列表(不是overlay2)。

所以,我尝试过:

docker run -td --name my-container --volume-driver tmpfs container-image
docker run -td --name my-container --volume-driver memfs container-image
Run Code Online (Sandbox Code Playgroud)

但在这两种情况下,docker inspect my-container我观​​察到:

    "GraphDriver": {
        "Data": {
            "LowerDir": "/var/lib/docker/overlay2/d1d112972c6b531976dd33e27edf213fc578856c3ee96b99c9afe53ad3f71a5e- ... /diff",
            "MergedDir": "/var/lib/docker/overlay2/d1d112972c6b531976dd33e27edf213fc578856c3ee96b99c9afe53ad3f71a5e/merged",
            "UpperDir": "/var/lib/docker/overlay2/d1d112972c6b531976dd33e27edf213fc578856c3ee96b99c9afe53ad3f71a5e/diff",
            "WorkDir": "/var/lib/docker/overlay2/d1d112972c6b531976dd33e27edf213fc578856c3ee96b99c9afe53ad3f71a5e/work"
        },
        "Name": "overlay2"
    }
Run Code Online (Sandbox Code Playgroud)

docker stats还指出这两种情况都使用默认映射策略。

tmpfs docker docker-volume

6
推荐指数
1
解决办法
2627
查看次数

将 tmpfs 或 ramfs 绑定到特定内存节点

我正在开发一个有两个内存节点的 NUMA 服务器。

我想创建一个将加载到主内存中的文件系统,例如 tmpfs 或 ramfs,并且我想将其绑定到特定的内存节点。换句话说,我不希望 ramfs 内容在两个内存节点上交错。

那么我怎样才能实现这一目标呢?

我尝试了带有 --file 选项的 numactl 命令,但它似乎只适用于单个文件(我需要加载一个目录)。

谢谢

memory bind numa pinning tmpfs

5
推荐指数
1
解决办法
1885
查看次数

GitLab:在构建映像中挂载 /builds 作为 tmpfs

在我们的 GitLab CI 环境中,我们有一个具有大量 RAM 和机械磁盘的构建服务器,运行 npm install 需要很长时间(我添加了缓存,但它仍然需要处理现有的包,因此缓存无法单独解决所有这些问题)。

我想在构建器 docker 映像中挂载 /builds 作为 tmpfs,但我很难弄清楚将此配置放在哪里。我可以在构建器映像本身中执行此操作,还是可以在 .gitlab-ci.yml 中为每个项目执行此操作?

目前我的 gitlab-ci.yml 看起来像这样:

image: docker:latest

services:
  - docker:dind

variables:
  DOCKER_DRIVER: overlay

cache:
  key: node_modules-${CI_COMMIT_REF_SLUG}
  paths:
    - node_modules/

stages:
  - test

test:
  image: docker-builder-javascript
  stage: test
  before_script:
    - npm install
  script:
    - npm test
Run Code Online (Sandbox Code Playgroud)

gitlab tmpfs docker gitlab-ci gitlab-ci-runner

5
推荐指数
1
解决办法
2221
查看次数

SSD 与 tmpfs 速度

tmpfs使用以下命令在 Ubuntu 上的主目录中创建了一个文件系统:

$ mount -t tmpfs -o size=1G,nr_inodes=10k,mode=0777 tmpfs space
$ df -h space .
File system                  Size    Used Avail. Avail% Mounted at
tmpfs                        1,0G    100M  925M   10%   /home/user/space
/dev/mapper/ubuntu--vg-root  914G    373G  495G   43%   /
Run Code Online (Sandbox Code Playgroud)

然后我写了这个Python程序:

#!/usr/bin/env python3

import time
import pickle


def f(fn):
    start = time.time()
    with open(fn, "rb") as fh:
        data = pickle.load(fh)
    end = time.time()
    print(str(end - start) + "s")
    return data


obj = list(map(str, range(10 * 1024 * 1024)))  # approx. 100M


def …
Run Code Online (Sandbox Code Playgroud)

python linux performance solid-state-drive tmpfs

5
推荐指数
1
解决办法
2342
查看次数