windows 上的 Rust 编译引用了不存在的 d: 驱动器

Rust compilation on windows referring to nonexistent d: drive

我尝试在 windows 中编译一个 Rust 项目,Rust 给出了错误的错误“磁盘没有 space”。请告诉我如何克服这个问题。

我注意到:我的笔记本电脑上没有 D: 驱动器,但此路径显示 d: 它来自哪里?

invoke_main
at **d:\agent_work**\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:78
49: __scrt_common_main_seh
at d:\agent_work\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288

Rust 版本:

Default host: x86_64-pc-windows-msvc
rustup home:  C:\apps\rust

stable-x86_64-pc-windows-msvc (default)
rustc 1.44.1 (c7087fe00 2020-06-17)
c:\apps\meilisearch\MeiliSearch>cargo run --release
    Finished release [optimized + debuginfo] target(s) in 2.13s
     Running `target\release\meilisearch.exe`
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Heed(Io(Os { code: 112, kind: Other, message: "**There is not enough space on the dis**k." }))', meilisearch-http\src\data.rs:69:27
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Panic in Arbiter thread.
error: process didn't exit successfully: `target\release\meilisearch.exe` (exit code: 101)

c:\apps\meilisearch\MeiliSearch>set RUST_BACKTRACE=1

c:\apps\meilisearch\MeiliSearch>cargo run --release
    Finished release [optimized + debuginfo] target(s) in 1.21s
     Running `target\release\meilisearch.exe`
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Heed(Io(Os { code: 112, kind: Other, message: "There is not enough space on the disk." }))', meilisearch-http\src\data.rs:69:27
stack backtrace:
   0: backtrace::backtrace::trace_unsynchronized
             at C:\Users\VssAdministrator\.cargo\registry\src\github.com-1ecc6299db9ec823\backtrace-0.3.46\src\backtrace\mod.rs:66
   1: std::sys_common::backtrace::_print_fmt
             at /rustc/c7087fe00d2ba919df1d813c040a5d47e43b0fe7\/src\libstd\sys_common\backtrace.rs:78
   2: std::sys_common::backtrace::_print::{{impl}}::fmt
             at /rustc/c7087fe00d2ba919df1d813c040a5d47e43b0fe7\/src\libstd\sys_common\backtrace.rs:59
   3: core::fmt::write
             at /rustc/c7087fe00d2ba919df1d813c040a5d47e43b0fe7\/src\libcore\fmt\mod.rs:1069
   4: std::io::Write::write_fmt<std::sys::windows::stdio::Stderr>
             at /rustc/c7087fe00d2ba919df1d813c040a5d47e43b0fe7\/src\libstd\io\mod.rs:1504
   5: std::sys_common::backtrace::_print
             at /rustc/c7087fe00d2ba919df1d813c040a5d47e43b0fe7\/src\libstd\sys_common\backtrace.rs:62
   6: std::sys_common::backtrace::print
             at /rustc/c7087fe00d2ba919df1d813c040a5d47e43b0fe7\/src\libstd\sys_common\backtrace.rs:49
   7: std::panicking::default_hook::{{closure}}
             at /rustc/c7087fe00d2ba919df1d813c040a5d47e43b0fe7\/src\libstd\panicking.rs:198
   8: std::panicking::default_hook
             at /rustc/c7087fe00d2ba919df1d813c040a5d47e43b0fe7\/src\libstd\panicking.rs:218
   9: std::panicking::rust_panic_with_hook
             at /rustc/c7087fe00d2ba919df1d813c040a5d47e43b0fe7\/src\libstd\panicking.rs:511
  10: std::panicking::begin_panic_handler
             at /rustc/c7087fe00d2ba919df1d813c040a5d47e43b0fe7\/src\libstd\panicking.rs:419
  11: core::panicking::panic_fmt
             at /rustc/c7087fe00d2ba919df1d813c040a5d47e43b0fe7\/src\libcore\panicking.rs:111
  12: core::option::expect_none_failed
             at /rustc/c7087fe00d2ba919df1d813c040a5d47e43b0fe7\/src\libcore\option.rs:1268
  13: core::result::Result<meilisearch_core::database::Database, meilisearch_core::error::Error>::unwrap
             at C:\apps\rust\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libcore\result.rs:1005
  14: meilisearch_http::data::Data::new
             at .\meilisearch-http\src\data.rs:69
  15: meilisearch::main::{{closure}}
             at .\meilisearch-http\src\main.rs:54
  16: core::future::from_generator::{{impl}}::poll<generator-0>
             at C:\apps\rust\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libcore\future\mod.rs:66
  17: tokio::task::local::{{impl}}::poll::{{closure}}::{{closure}}
             at C:\apps\rust_cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.2.21\src\task\local.rs:526
  18: tokio::coop::with_budget::{{closure}}
             at C:\apps\rust_cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.2.21\src\coop.rs:127
  19: std::thread::local::LocalKey<core::cell::Cell<tokio::coop::Budget>>::try_with
             at C:\apps\rust\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libstd\thread\local.rs:263
  20: std::thread::local::LocalKey<core::cell::Cell<tokio::coop::Budget>>::with
             at C:\apps\rust\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libstd\thread\local.rs:239
  21: tokio::coop::with_budget
             at C:\apps\rust_cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.2.21\src\coop.rs:120
  22: tokio::coop::budget
             at C:\apps\rust_cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.2.21\src\coop.rs:96
  23: tokio::task::local::{{impl}}::poll::{{closure}}
             at C:\apps\rust_cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.2.21\src\task\local.rs:526
  24: tokio::macros::scoped_tls::ScopedKey<tokio::task::local::Context>::set<tokio::task::local::Context,closure-0,core::task::poll::Poll<core::result::Result<(), main_error::MainError>>>
             at C:\apps\rust_cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.2.21\src\macros\scoped_tls.rs:63
  25: tokio::task::local::LocalSet::with
             at C:\apps\rust_cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.2.21\src\task\local.rs:440
  26: tokio::task::local::{{impl}}::poll
             at C:\apps\rust_cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.2.21\src\task\local.rs:516
  27: tokio::task::local::{{impl}}::run_until::{{closure}}
             at C:\apps\rust_cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.2.21\src\task\local.rs:390
  28: core::future::from_generator::{{impl}}::poll<generator-0>
             at C:\apps\rust\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libcore\future\mod.rs:66
  29: tokio::runtime::basic_scheduler::enter::{{closure}}
             at C:\apps\rust_cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.2.21\src\runtime\basic_scheduler.rs:213
  30: tokio::macros::scoped_tls::ScopedKey<tokio::runtime::basic_scheduler::Context>::set<tokio::runtime::basic_scheduler::Context,closure-0,core::result::Result<(), main_error::MainError>>
             at C:\apps\rust_cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.2.21\src\macros\scoped_tls.rs:63
  31: tokio::runtime::basic_scheduler::enter
             at C:\apps\rust_cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.2.21\src\runtime\basic_scheduler.rs:213
  32: tokio::runtime::basic_scheduler::BasicScheduler<tokio::park::either::Either<tokio::time::driver::Driver<tokio::park::either::Either<tokio::io::driver::Driver, tokio::park::thread::ParkThread>>, tokio::park::either::Either<tokio::io::driver::Driver, tokio:
             at C:\apps\rust_cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.2.21\src\runtime\basic_scheduler.rs:123
  33: tokio::runtime::{{impl}}::block_on::{{closure}}
             at C:\apps\rust_cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.2.21\src\runtime\mod.rs:444
  34: tokio::runtime::context::enter<closure-0,core::result::Result<(), main_error::MainError>>
             at C:\apps\rust_cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.2.21\src\runtime\context.rs:72
  35: tokio::runtime::handle::Handle::enter<closure-0,core::result::Result<(), main_error::MainError>>
             at C:\apps\rust_cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.2.21\src\runtime\handle.rs:76
  36: tokio::runtime::Runtime::block_on
             at C:\apps\rust_cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.2.21\src\runtime\mod.rs:441
  37: tokio::task::local::LocalSet::block_on
             at C:\apps\rust_cargo\registry\src\github.com-1ecc6299db9ec823\tokio-0.2.21\src\task\local.rs:351
  38: actix_rt::runtime::Runtime::block_on
             at C:\apps\rust_cargo\registry\src\github.com-1ecc6299db9ec823\actix-rt-1.1.1\src\runtime.rs:89
  39: actix_rt::builder::SystemRunner::block_on
             at C:\apps\rust_cargo\registry\src\github.com-1ecc6299db9ec823\actix-rt-1.1.1\src\builder.rs:187
  40: meilisearch::main
             at .\meilisearch-http\src\main.rs:16
  41: std::rt::lang_start::{{closure}}<core::result::Result<(), main_error::MainError>>
             at C:\apps\rust\toolchains\stable-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libstd\rt.rs:67
  42: std::rt::lang_start_internal::{{closure}}
             at /rustc/c7087fe00d2ba919df1d813c040a5d47e43b0fe7\/src\libstd\rt.rs:52
  43: std::panicking::try::do_call
             at /rustc/c7087fe00d2ba919df1d813c040a5d47e43b0fe7\/src\libstd\panicking.rs:331
  44: std::panicking::try
             at /rustc/c7087fe00d2ba919df1d813c040a5d47e43b0fe7\/src\libstd\panicking.rs:274
  45: std::panic::catch_unwind
             at /rustc/c7087fe00d2ba919df1d813c040a5d47e43b0fe7\/src\libstd\panic.rs:394
  46: std::rt::lang_start_internal
             at /rustc/c7087fe00d2ba919df1d813c040a5d47e43b0fe7\/src\libstd\rt.rs:51
  47: main
  48: invoke_main
             at d:\agent\_work\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:78
  49: __scrt_common_main_seh
             at d:\agent\_work\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288
  50: BaseThreadInitThunk
  51: RtlUserThreadStart
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
Panic in Arbiter thread.
error: process didn't exit successfully: `target\release\meilisearch.exe` (exit code: 101)

c:\apps\meilisearch\MeiliSearch>

TLDR:

  • 包含 d: 的路径与编译 Microsoft C 运行time 库的机器相关,与您的机器无关。它们与您遇到的错误无关。

  • 您收到的错误是因为该程序试图在与您 运行 从中创建它的目录相同的卷中创建一个 200GB 的数据库,并且没有足够的 space.


您看到的错误来自 运行 编译程序,而不是编译程序。从输出中的这一行可以看出这一点:

 Running `target\release\meilisearch.exe`

这一行指出了错误的位置:

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Heed(Io(Os { code: 112, kind: Other, message: "There is not enough space on the disk." }))', meilisearch-http\src\data.rs:69:27

具体来说:meilisearch-http\src\data.rs:69:27.

一些 google 侦探工作让我 Meilisearch where I found the offending line:

let db = Arc::new(Database::open_or_create(opt.db_path, db_opt).unwrap());

unwrap 函数调用正在触发恐慌。发生这种情况是因为函数 open_or_create 正在返回您最终看到的错误。

多一点搜索让我找到了这个项目的用户手册,其中描述了选项,特别是 Database Path 选项,它的默认值为 ./data

在同一页面上,我看到了两个关于最大数据库大小的条目 (Max UDB Size and Max MDB size)。它们包括注释:

On Windows it is a fixed size that will be allocated on launch. Because this allocates 100Gb on MeiliSearch launch, a Windows user can use this option to decrease the size of the database.

好像有两个这样的数据库,每个100GB,是启动时分配的。似乎建议是,如果您不想从一开始就分配 200GB,则应将这些设置为较低的值。

所以:错误是说 space 包含 ./data 的卷(相对于您 运行 安装程序的目录)不足以分配 200GB 的数据库.

但这 'd:' 是从哪里来的?好吧,当您 运行 设置了环境变量 RUST_BACKTRACE 的程序时,它会显示 作为错误。堆栈跟踪向您显示了导致崩溃的每个函数调用,包括一些属于 C 运行time 库的部分(即,甚至不是生锈的一部分)。特别是这些:

48: invoke_main
         at d:\agent\_work\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:78
49: __scrt_common_main_seh
         at d:\agent\_work\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288

是 Microsoft C 运行时间库的一部分。

回溯包括作为堆栈跟踪一部分的函数的文件和行号信息。但是此信息在编译时插入到库中,大概是在某些 Microsoft 构建服务器上。

给出的路径与编译 C 运行time 库的机器相关,与您的机器无关。