Articles of 文件系统

uWSGI下的Python用错误的权限创build文件和目录

我是Python开发的新手。 我写了一个小的Python Web应用程序,创build一些文件和目录。 当我在命令行中运行它时,一切正常。 但在uWSGI下,所有新文件分别获得-rw-rw-rw-mode和drwxrwxrwx而不是-rw-rw-r-和drwxrwxr-x目录。 uWSGIconfiguration是Ubuntu的默认configuration,没什么特别的。 uWSGI应用程序ini文件就是这样的: [uwsgi] plugins=python nginxconfiguration是这样的: server { listen 8080; access_log /path/to/logs/access.log; error_log /path/to/logs/error.log; location / { uwsgi_pass unix:/var/run/uwsgi/app/myapp/socket; include uwsgi_params; uwsgi_param UWSGI_PYHOME /path/to/myapp/.env/; uwsgi_param UWSGI_CHDIR /path/to/myapp/; uwsgi_param UWSGI_SCRIPT myapp; } } 我想问题是在uWSGIconfiguration不足,但我不知道我必须做什么。

如何确定纯系统文件系统?

我正在写notifyfs(现在只用于linux),它是: 一个fsevent通知程序,它应该与保险丝和networking文件系统一起工作,如fuse.sshfs,cifs和nfs。 一个客户可以用来build立他们的意见的项目caching 如果/ proc / self / mountinfo中报告的是与系统相关的文件系统或“真实的”文件系统,则肯定有一种方式可以通知informfs来确定文件系统。 例如cpuset,cgroup,devtmpfs和sysfs就是我所说的系统文件系统,而ext2,ext3和tmpfs,vfat和nfs,cifs是“真正的”文件系统。 系统文件系统与真实文件系统的区别在于真正的文件系统是通过inotify进行监视的,而系统的文件系统则不是。 将一个inotify手表放在/ proc文件中,你就会发现这是行不通的。 当查看/ proc / filesystems时,唯一的额外信息是“nodev”,它表示mountsource是否是一个blockdevice。 当它是一个块设备,那么它不是一个系统文件系统。 但是,当它不是一个块设备(并指定nodev)时,并不总是一个系统文件系统,例如networking文件系统cifs和nfs,或者tmpfs和ramfs。 有没有办法确定一个“nodev”文件系统的行为像一个真正的文件系统,例如通过inotify可见? 提前致谢, 燕姿

通过操作ext4创build目录循环

为了学术目的,我正在搞乱一些文件系统。 我的目标之一是在每个文件系统中创build一个目录循环。 目前我坚持ext4由于某种原因不会像其他人一样工作。 我创build了两个文件夹'top'和'bottom',尝试操作ext4的磁盘结构来创build从底部到顶部的某种硬链接,导致无限循环。 问题是,当我用ls浏览文件系统时,它既没有显示这两个文件夹(尽pipe我只操作了下面的那个文件夹),也显示了最上面的文件夹,但是在上面,目录列表被打破如下: ls: Access to bottom not possible: I/O Error (freely translated from german) total 2 drwxr-xr-x 3 root root 1024 Nov 14 15:49 . drwxr-xr-x 4 root root 1024 Nov 14 15:48 .. d????????? ? ? ? ? ? bottom 到目前为止,我采取的步骤是: find顶部inode(条目12)的inode表条目,看它是否指向框3510 下一个inode表条目用于底部(条目13),见它指向框3511 转到块3510,让。 和..不变,但改变底部的inode数为12 尝试使用ls – > Error访问目录 转到块3511,更改。 到inode […]

PHP的file_get_contents()有时会返回零字节/ false

我们构build了一个PHP脚本来caching服务器(Debian Wheezy,SELinux,Apache,PHP 5.3.26)的硬盘(ext4)上的图像。 类似下面的代码被使用: $data = "…"; $file = "cached_foo_1234.jpg"; if (!is_file($file)) file_put_contents($file, $data); 在脚本后面,打开相同的文件供阅读: $content = file_get_contents($file); 尽pipe硬盘上有正确的数据,但是在文件写入文件系统时,有时$内容是空的。 函数filesize()显示相同的行为。 任何日志文件(审计,PHP等)都没有错误。 在file_get_contents()之上放置clearstatcache(),或者用file_put_contents()中的LOCK_EXlocking文件没有帮助。 该脚本与相同的文件名并行访问很多。 Apache也可以直接返回现有的caching图片,而不需要PHP。 我猜文件locking应避免写入文件时的空回报。 当我们试图从文件系统读取文件时,为什么我们得到零字节?

在PHP中获取大文件的MIMEtypes

我有一个PHP脚本上传文件,并返回给定文件的MIMEtypes。 这对小文件格式非常有效,但是当我开始使用大文件(100MB +)时,响应迅速下降。 有没有办法快速检索给定文件的MIMEtypes,而无需将其加载到内存或读取整个文件? 据我所知,mimetype存储在一个文件的前几个字节,所以我不应该需要处理整个资源,是否正确? 我已经尝试了以下内容: finfo_open(FILEINFO_MIME_TYPE) -> crashes on files over 60mb file -bi -> Delay directly relates to size of file. Slow (10+ seconds) xdg-mime query filetype your_file -> Slow. As above 我找不到任何其他的PHP脚本/模块可以帮助。 我相信我并不是唯一一个经历过这个事情的人,但是我的Google-fu看上去缺乏,因为我根本找不到任何解决scheme。 我正在使用Oracle Linux框,和我的生产环境一样。 谢谢! 编辑:我的文件也没有文件扩展名,他们存储与一个独特的ID很像 eed78421-7184-46f3-9c68-73315c47e3c8

inode实际上是否指向磁盘中的地址?

Linux文件系统中的inode如何实际指向磁盘上的块? 它是否包含一个从0到2 ^ 63 – 1的64位可寻址数字? 或者inode结构和实际磁盘地址之间是否有一层?

在块层/设备上绕过4KB的块大小限制

我们正在开发一种ssdtypes的存储硬件设备,可以一次读取大于4KB的大块大小(甚至MB大小)的读/写请求。 我的理解是,Linux及其文件系统将把文件“砍倒”成4KB的块大小,将被传递给块设备驱动程序,这将需要用设备中的数据物理填充块(例如,用于写入) 我也知道内核页面大小在这个限制中有一个作用,因为它被设置为4KB。 对于实验,我想知道是否有办法实际增加这个块的大小,这样我们会节省一些时间(而不是做多个4KB的写入,我们可以用更大的块大小来做)。 是否有任何FS或任何现有的项目,我可以看看这个? 如果不是的话,那么做这个实验需要什么 – linux的哪些部分需要修改? 试图找出所需的困难和资源水平。 或者,如果甚至不可能这样做和/或什么原因我们甚至不需要这样做。 任何意见表示赞赏。 谢谢。

使用O_DIRECT写入时,是否需要使无效caching读取?

我遇到了使用LVM和我正在使用的磁盘驱动程序的竞争条件。 它看起来像vgcreate和lvcreate在O_DIRECT模式下做他们的IO。 我用-vvv运行这些命令时发现了这个问题。 Clearing start of logical volume "test" /dev/Finance-PG-vg/test: Added to device cache Opened /dev/Finance-PG-vg/test RW O_DIRECT Wiping /dev/Finance-PG-vg/test at sector 0 length 8 sectors /dev/Finance-PG-vg/test: block size is 4096 bytes Closed /dev/Finance-PG-vg/test 具体来说,我怀疑我们的读取正在caching,并没有得到最新的磁盘内容。 如果用O_DIRECT写入内容,我的理解是绕过caching。 因此,对该扇区的任何读取都将从caching中接收旧数据,至less在caching失效之前。 所以如果我想读几秒钟内写的O_DIRECT,我应该先放下caching? 正确?

在Linux中创build一个虚拟文件

我正在使用一些我无法更改的现有软件,它从一堆configuration文件中加载它的configuration数据,所有的configuration文件都遵循相同的命名模式,比如file_param1.conf,file_param2.conf,file_param3.conf等。文件内容之间的区别只是param1 vs param2 vs param3,所以一个典型的configuration文件将如下所示 foo=bar x=param1 要么 foo=bar x=param2 有没有什么地方在Linux上创build一个虚拟FS的例子,让我访问file_param1.confdynamic生成与适当的参数variables的文件? 我知道关于scriptfs,但不知道使用它的任何教程。

如何在c程序中访问linux文件系统的读写速度?

我需要访问linux内核指标,其中之一就是文件系统的读写速度。 我知道有'dd','hdparm'和'iotop'等命令提供有关文件系统数据传输速度的信息,但是我不知道如何在C程序中读取这些信息, ,我打印控制台的速度。 如果有一个文件,它有速度信息,它可以在C程序中读取文件和访问速度。 如何才能做到这一点? 谢谢。 我读了iostats.txt文档。文件/ proc / diskstats每行有11个参数。 根据iostats.txt,每行第三个参数是读取扇区总数,第四个参数是读取时间总数(以毫秒为单位)。 如果每个扇区是4096字节 ,那么阅读速度公式必须是: 速度=(($ 3)* 4096)/ $ 4 ($ x表示参数x) 但是当我计算出闪存的读取速度时,根据命令iostat -k 2或gnu disk utility(graphics应用程序)的指示,它是0.2 MB / sec,尽pipe它必须是大约7 Mb / sec。 如何从这些参数评估速度,以MB /秒为单位评估速度的正确公式是什么?