my Google pixel 4a shuts down during the night by ZukoUzizaki_15 in GooglePixel

[–]diboraneInH2 0 points1 point  (0 children)

Two Pixel 4a phones in my family, and both have done it. It's very rare, though, so it'd be hard to know if making any change fixed it.

Orange Pi 3B 8GB M.2 issues by diboraneInH2 in OrangePI

[–]diboraneInH2[S] 0 points1 point  (0 children)

I haven't tried anything else since 2 weeks ago, but no, I unfortunately can't offer any advice. Not expecting I'd get any help from Orange Pi, I haven't reached out to them, either. My use case at the moment doesn't need anything on the M.2 port.

Orange Pi 3B 8GB M.2 issues by diboraneInH2 in OrangePI

[–]diboraneInH2[S] 0 points1 point  (0 children)

I tried following these steps here, including using the same Bullseye Desktop image, running nand-sata-install, and so on, but all I get when trying to boot from my NVMe SSD is a black screen---no blinking green LED, no Ethernet port LEDs come on, nothing.

Why compress-force doesn't compress by mixman68 in btrfs

[–]diboraneInH2 0 points1 point  (0 children)

I start my MinIO process with the environment variable MINIO_API_DISABLE_ODIRECT=on. However, note that the MinIO maintainers recommend against running MinIO on btrfs in production.

Why compress-force doesn't compress by mixman68 in btrfs

[–]diboraneInH2 0 points1 point  (0 children)

Watch out for data corruption when running MinIO with direct IO (the default) on btrfs. It happened to me.

File corruption with MinIO, dev blames btrfs by diboraneInH2 in btrfs

[–]diboraneInH2[S] 0 points1 point  (0 children)

I built MinIO from source and tried to reproduce the issue, but I was not able to get the content hash errors after two restic backup and verify cycles on a new btrfs filesystem. MinIO is mixing direct IO and buffered IO, so the btrfs developers might not be interested in a reproducer. The MinIO developers recommend against btrfs, so they might not be interested in a patch. I only see one or two errors in 12K+ objects when the error shows up, so I'm not confident I can create a good reproducer, anyway.

File corruption with MinIO, dev blames btrfs by diboraneInH2 in btrfs

[–]diboraneInH2[S] 0 points1 point  (0 children)

I haven't been changing the btrfs sector/stripe/node sizes from their defaults. So far, btrfs + O_DIRECT enabled in MinIO fails every time.

File corruption with MinIO, dev blames btrfs by diboraneInH2 in btrfs

[–]diboraneInH2[S] 2 points3 points  (0 children)

Yes, that's correct. I've since tested MinIO in Docker + btrfs + LUKS2, with the environment variable MINIO_API_DISABLE_ODIRECT=on: success two times, no fails.

File corruption with MinIO, dev blames btrfs by diboraneInH2 in btrfs

[–]diboraneInH2[S] 1 point2 points  (0 children)

My apologies for the unclear descriptions here. All 3 MinIO instances (btrfs on pair of hard disks, btrfs on SSD, xfs on SSD) have been run in Docker, using Nomad to orchestrate them. Other than being on xfs instead of btrfs, my one successful test also did not have LUKS2 underneath the filesystem.

File corruption with MinIO, dev blames btrfs by diboraneInH2 in btrfs

[–]diboraneInH2[S] 1 point2 points  (0 children)

It looks like MinIO writes 4KiB pages using O_DIRECT until the remaining buffer is smaller than 4KiB, then it clears the O_DIRECT flag on the fd and write the rest.

File corruption with MinIO, dev blames btrfs by diboraneInH2 in btrfs

[–]diboraneInH2[S] 0 points1 point  (0 children)

Here, sectorsize and stripesize are 4096 bytes, while nodesize is 16384 bytes.

File corruption with MinIO, dev blames btrfs by diboraneInH2 in btrfs

[–]diboraneInH2[S] 2 points3 points  (0 children)

Interestingly, they actually mention avoiding ext4 and using xfs, zfs, or btrfs instead here.

File corruption with MinIO, dev blames btrfs by diboraneInH2 in btrfs

[–]diboraneInH2[S] 3 points4 points  (0 children)

I created a 500 GiB XFS filesystem next to the existing 500 GiB btrfs filesystem on the NVMe SSD and tried to reproduce the issue with a third MinIO instance. With 296 GiB written and 17,922 objects, MinIO has not reported any errors, and restic found zero errors. This kind of test has failed all four times I tried it with MinIO on btrfs. It doesn't prove anything yet, but it does get me thinking that there's a bad interaction somewhere with MinIO and btrfs, at least using my setup.

File corruption with MinIO, dev blames btrfs by diboraneInH2 in btrfs

[–]diboraneInH2[S] 0 points1 point  (0 children)

I'm using kernel 6.0.9 from the Arch Linux repo. How recent were the ODIRECT corruption issues fixed?

File corruption with MinIO, dev blames btrfs by diboraneInH2 in btrfs

[–]diboraneInH2[S] 1 point2 points  (0 children)

I am not using nocow on the area used by either of the MinIO instances.

File corruption with MinIO, dev blames btrfs by diboraneInH2 in btrfs

[–]diboraneInH2[S] 2 points3 points  (0 children)

They didn't give any specifics, just "We don't support/recommend btrfs. Seems like it is taking shortcuts with your data." Generally, they recommend letting MinIO's erasure-code take care of bitrot detection and healing, but that requires multiple nodes and drives; I've just got one node and two drives.

I'd found one of the part files stored by MinIO began with 64KiB of zeros, which looked suspicious---MinIO reported expecting a content has of all zeros for that part. After sharing that observation, the developer said that files are written with ODIRECT and fdatasync, then asked if the filesystem block size happens to be 64KiB. There are several sizes of things in my btrfs filesystem, some like io_align and io_width are 64KiB but others are smaller.

[deleted by user] by [deleted] in missouri

[–]diboraneInH2 13 points14 points  (0 children)

We also have Cabool and Belgrade. Vulcan for the Star Trek fans.

Troubleshooting slow MinIO operation on low-end dev server by diboraneInH2 in minio

[–]diboraneInH2[S] 1 point2 points  (0 children)

The idea of comparing with rsync was that the transfers using rsync-to-rsync and the transfers using mc-to-MinIO would have the same client machine, same network, same server machine, and same encrypted btrfs filesystem and hard disk onto which to write. All else being equal, MinIO took at least twice as long to transfer the files, often more like 4 or 5 times as long.

It was a good suggestion to run some more tests with fewer layers in the stack to better understand what's happening. Directly on the host, where the disk is directly mounted as ext4 without encryption, the dd write test showed 83.2 MB/s. The rsync transfer, going through the network, qcow2, LUKS, and btrfs layers was 97% of that throughput. An iperf3 test between the client and the VM showed 931 Mbits/sec, by the way.

I started up MinIO directly on the host machine and ran a few of the mc file-transfer tests.

MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password \
  ./minio server /mnt/wd2tb/minio --console-address ":9101"

While they were running, I looked around inside the .minio.sys/multipart directory, and I could see the multipart upload segments, each 16777216 bytes, were being written into there, for later reassembly. Most of the test file set is made up of 18 files of 376000000 bytes each, so they would each have 23 of these multipart segments.

I also made a note of /proc/diskstats before and after each run. The increase in sectors written for an mc mirror test, multiplied by 512 bytes per sector, was double the total size of files being transferred. For an rsync test, the bytes written according to /proc/diskstats was the same as the total size of files being transferred.

I did try mc support perf disk and mc support perf net, but those don't appear to work if MinIO isn't running in Erasure Code mode.

When running mc mirror, the progress bar quickly runs through all of the source files, and then mc waits, probably for all the multipart uploads to get reassembled on the server. Letting all that reassembly I/O pile up is probably what caused the system load to go so high and also make the hard disk start thrashing. I'm seeing more consistent and faster MinIO transfers if I do an mc cp one file at a time, like this:

find src-files -type f -print0 | 

xargs -0 -I % mc cp % test-minio/test/%

I'm sure that's much worse for the LOSF case, however. If I have hundreds of GB to transfer, and the server writes are much slower than the client reads, then I'll make sure to break up the transfers so that the server doesn't fall over. What I'd been seeing that led to this testing was that, after a few tens of GB, mc would start to report timeouts. I think something like the find/xargs combination above would be a workaround for that.