#devices #swap #pure #file #io #space #construct

mkswap

使用纯 Rust 创建交换文件或设备

2个版本

0.1.1 2022年10月12日
0.1.0 2022年7月3日

#1057 in 硬件支持

MIT 许可证

10KB
141

纯 Rust 编写的 mkswap

在 Rust 中初始化交换设备或文件。

例如

```rust
use std::io::Cursor;

use mkswap::SwapWriter;

let mut buffer: Cursor<Vec<u8>> = Cursor::new(vec![0; 40 * 1024]);
let size = SwapWriter::new()
    .label("🔀".into())
    .unwrap()
    .write(&mut buffer)
    .unwrap();


lib.rs:

在纯 Rust 中创建交换文件和设备。

此库将构建以下头部,来自 Linux 内核的副本

// Note that this code snippet is licensed GPL-2.0, matching include/linux/swap.h in the Linux Kernel.
union swap_header {
    struct {
        char reserved[PAGE_SIZE - 10];
        char magic[10];                 /* SWAP-SPACE or SWAPSPACE2 */
    } magic;
    struct {
        char            bootbits[1024]; /* Space for disklabel etc. */
        __u32           version;
        __u32           last_page;
        __u32           nr_badpages;
        unsigned char   sws_uuid[16];
        unsigned char   sws_volume[16];
        __u32           padding[117];
        __u32           badpages[1];
    } info;
};
use std::io::Cursor;

use mkswap::SwapWriter;

let mut buffer: Cursor<Vec<u8>> = Cursor::new(vec![0; 40 * 1024]);
let size = SwapWriter::new()
    .label("🔀".into())
    .unwrap()
    .write(&mut buffer)
    .unwrap();

注意

此库将在文件中搜索,包括回到位置 0。如果这不是期望的,请考虑使用 fscommon::StreamSlice 或发送 pull request。

依赖项

~0.5–1.2MB
~23K SLoC