标签: disk

磁盘的写入速度恒定

我正在按顺序将实时数据写入空的旋转磁盘.(编辑:它不必是连续的,只要我可以读回,如果它是顺序的.)在100 MB的速率的数据到达/ s和盘具有120 MB的平均写入速度/秒.

有时(特别是当可用空间开始减少时)磁盘速度低于100 MB/s,具体取决于磁盘写入盘片的位置,我必须丢弃重要数据.

有没有办法以一种模式(或其他方式)写入磁盘,以确保接近平均速率的恒定写入速度?无论磁盘上当前有多少数据.

编辑:

关于为什么我认为这应该成为可能的一些注释.

当通常写入磁盘时,它从盘片的快速部分开始,然后写入较慢的部分.但是,如果我可以将一半数据写入快速部分,将一半数据写入慢速部分(即1秒钟可以写入50MB到快速部分,50MB写入慢速部分),它们应该在中间相遇.我可以达到一个恒定的速度?

作为一名程序员,我不知道如何确定数据写在盘子上的位置,或者即使操作系统可以实现类似的功能.

windows io disk

11
推荐指数
3
解决办法
1255
查看次数

如何在iPhone OS上直接下载文件到磁盘?

我想使用iPhone OS上的objective-c直接从URL下载文件到磁盘.

目前我正在使用NSURLConnection发送synchronousRequest,将返回的NSData写入文件.

如何更改下载处理(仍然有请求同步,它已经在后台线程中)将数据直接写入磁盘,而不是使用内存变量来存储完整的内容(只有小部分)?

一个示例代码将不胜感激.

提前感谢您的回复!

iphone file disk objective-c download

10
推荐指数
1
解决办法
7463
查看次数

Python和跨平台方式列出Linux,Windows和Mac上的磁盘驱动器

我试图列出系统可能具有的磁盘驱动器.

在Windows上,它可能类似于"C:/","D:/","E:/".

在Linux上,它可能类似于"/ boot","/ media/SDCard"等.

我不知道它在Mac上是什么样的.也许/ Volumes下的东西.

有没有人知道Python中的跨平台方式(即在Linux,Windows和Mac上运行的方式)?

谢谢!

哦:快速说明,我正在运行Python 2.6.

python cross-platform file disk

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

打开原始磁盘并获取OS X大小

使用下面的代码,我能够在我的机器上成功打开原始磁盘,但是当我得到磁盘长度时,我每次都得到0 ...

// Where "Path" is /dev/rdisk1 -- is rdisk1 versus disk1 the proper way to open a raw disk?
Device = open(Path, O_RDWR);
if (Device == -1)
{
    throw xException("Error opening device");
}
Run Code Online (Sandbox Code Playgroud)

使用这两种方法获取大小将返回0:

struct stat st;

if (stat(Path, &st) == 0)
    _Length = st.st_size;
Run Code Online (Sandbox Code Playgroud)

/

_Length = (INT64)lseek(Device, 0, SEEK_END);
        lseek(Device, 0, SEEK_SET);
Run Code Online (Sandbox Code Playgroud)

我并不完全熟悉非Windows平台上的编程,所以请原谅任何看似奇怪的东西.我的问题是:

  1. 这是在OS X下打开原始磁盘的正确方法吗?
  2. 可能导致磁盘大小返回为0的原因是什么?

有问题的磁盘是一个未格式化的磁盘,但对于那些想要从磁盘工具中获取信息的人(删除了非重要的东西):

Name :  ST920217 AS Media
Type :  Disk

Partition Map Scheme :  Unformatted
Disk Identifier      :  disk1
Media Name           : …
Run Code Online (Sandbox Code Playgroud)

c++ macos file-io disk

10
推荐指数
1
解决办法
2510
查看次数

在Windows上禁用或刷新页面缓存

我假设Windows与Linux的页面缓存有类似的概念,用于存储来自磁盘的内存数据,如文件,可执行文件和动态库.我想知道是否有可能禁用这样的缓存或至少清除/清除它.

windows caching disk

10
推荐指数
1
解决办法
3091
查看次数

File.WriteAllText没有将数据刷新到磁盘

我现在有3个报告用户的机器在使用我的软件时崩溃..崩溃与我的程序无关,但是当他们重新启动配置文件时,我的程序写入都是损坏的.

编写文件没有什么特别之处,只需创建一个Json表示并使用File.WriteAllText()将其转储到磁盘上

// save our contents to the disk
string json = JsonConvert.SerializeObject(objectInfo, Formatting.Indented);

// write the contents
File.WriteAllText(path, json);
Run Code Online (Sandbox Code Playgroud)

我有一个用户发给我一个文件,长度看起来正确(~3kb),但内容都是0x00.

根据下面的帖子,File.WriteAllText应该关闭文件句柄,将任何未写入的内容刷新到磁盘:

在我的C#代码中,计算机是否一直等到输出完成后再继续?

但正如Alberto在评论中指出的那样:

System.IO.File.WriteAllText完成后,将所有文本刷新到文件系统缓存,然后,它将被懒惰地写入驱动器.

所以我认为这里发生的事情是文件被清除并用0x00初始化,但是当系统崩溃时数据还没有被写入.

我想可能使用某种临时文件,所以过程将是这样的:

  1. 将新内容写入临时文件
  2. 删除原始文件
  3. 将临时文件重命名为原始文件

我认为这不会解决问题,因为我认为即使IO仍处于待决状态,Windows也只会移动文件.

有什么方法可以强制机器将数据转储到磁盘而不是决定何时进行,或者更新文件更好的方法?

更新:

基于@usr,@ mikez和@llya luzyanin的建议,我创建了一个新的WriteAllText函数,它使用以下逻辑执行写入:

  1. 使用FileOptions.WriteThrough标志创建包含新内容的临时文件
  2. 将数据写入磁盘(在写入完成之前不会返回)
  3. File.Replace将新临时文件的内容复制到真实文件,进行备份

有了这个逻辑,如果最终文件加载失败,我的代码会检查备份文件并加载它

这是代码:

public static void WriteAllTextWithBackup(string path, string contents)
{
    // generate a temp filename
    var tempPath = Path.GetTempFileName();

    // create the backup name
    var backup = path + ".backup";

    // delete any existing backups
    if (File.Exists(backup))
        File.Delete(backup);

    // get the …
Run Code Online (Sandbox Code Playgroud)

c# windows io disk

10
推荐指数
1
解决办法
4832
查看次数

在Python中,如何检查驱动器是否存在而不会为可移动驱动器抛出错误?

这是我到目前为止所拥有的:

import os.path as op
for d in map(chr, range(98, 123)): #drives b-z
    if not op.isdir(d + ':/'): continue
Run Code Online (Sandbox Code Playgroud)

问题是它在Windows中弹出一个"No Disk"错误框:

maya.exe - 无磁盘:驱动器中没有磁盘.请将磁盘插入驱动器\ Device\Harddisk1\DR1 [取消,重试,继续]

我无法捕获异常,因为它实际上没有抛出Python错误.

显然,这只发生在已分配字母但未插入驱动器的可移动驱动器上.

有没有办法解决这个问题,而没有特别告诉脚本哪些驱动器跳过?

在我的场景中,我在学校实验室,驱动器号码根据我所在的实验室计算机而变化.此外,我没有访问磁盘管理的安全权限.

python windows error-handling path disk

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

如何尽可能高效地处理大量并发磁盘写请求

假设下面的方法被.net 4应用程序中的不同线程调用了几千次.处理这种情况的最佳方法是什么?了解磁盘是这里的瓶颈,但我希望WriteFile()方法快速返回.

数据可以高达几MB.我们在谈论线程池,TPL等吗?

public void WriteFile(string FileName, MemoryStream Data)
{
   try
   {
      using (FileStream DiskFile = File.OpenWrite(FileName))
      {
         Data.WriteTo(DiskFile);
         DiskFile.Flush();
         DiskFile.Close();
      }
   }
   catch (Exception e)
   {
      Console.WriteLine(e.Message);
   }
}
Run Code Online (Sandbox Code Playgroud)

.net c# disk

9
推荐指数
2
解决办法
2756
查看次数

当我们看到kb或mb时,我们如何确定尺寸是基于1000还是1024

Linux中有许多程序可以显示文件的大小,其中一些以块为单位显示,有些以字节为单位.但是当谈到一些人类可读的形式,比如ls -sh,lvs,dd bs = size等等,当我们看到kb,KB,mB,MB,K时,我们如何判断它是1024还是1000的倍数?有些人将它们与像lvs这样的大写字母区分开来,有些像dd这样有不同的字符,但是,这些东西是否有一般规则,因为到目前为止我找不到它.谢谢.

linux size storage metrics disk

9
推荐指数
1
解决办法
2468
查看次数

文件系统块大小与磁盘块大小

我正在阅读《Hadoop:权威指南》,然后出现了以下段落。

磁盘具有块大小,这是它可以读取或写入的最小数据量。单个磁盘的文件系统通过处理块中的数据来构建,块是磁盘块大小的整数倍。文件系统块的大小通常为几千字节,而磁盘块的大小通常为 512 字节。

我的理解是磁盘块受硬件限制(每次可以从磁盘读取/写入的数据量)。操作系统创建称为文件系统的抽象,其中它有自己的块大小,该块大小比磁盘块大小大(多倍)。与磁盘类似,操作系统读/写数据的大小为文件系统块大小。对于单个读/写文件系统块,将执行多个磁盘块操作。我的理解正确吗?

filesystems file disk

9
推荐指数
1
解决办法
5966
查看次数