If I open a file without closing it and continue to stream data there, is it better than if I open, write and close for each new piece of data?
Não. Fechar ou não fechar um arquivo em que a saída é armazenada em buffer faz diferença se / quando os dados estão visíveis para serem lidos no arquivo, mas isso é diferente de quando ele é fisicamente gravado em disco.
Em outras palavras, quando você solta um filehandle (por exemplo, fechando-o), uma leitura de processo separada do mesmo arquivo agora poderá ler os dados que você liberou para o arquivo, mas isso não significa necessariamente que o arquivo literalmente foi escrito pelo kernel. Se estiver em uso, é possivelmente armazenado em cache, e pode ser apenas o cache que é afetado.
Os caches de disco do sistema são liberados (- > gravados em um dispositivo) quando sync
é chamado em um sistema de arquivos inteiro. AFAIK não há como fazer isso em um único arquivo.
Another question is whether there are any heuristics software could use to detect whether the 'write limit' is approaching?
Eu duvido muito, especialmente porque você não sabe muito sobre o dispositivo. Números como esse serão aproximados e conservadores, e é por isso que os dispositivos de imagem geralmente não são criados para falhar em um ponto predefinido: eles falham quando falham e, como eles poderiam falhar a qualquer momento, você também pode fazer o que puder para verificar e proteger contra perdas por causa disso, ponto final, em vez de supor que está tudo bem até ~ N operações.
Execute fsck
sempre que possível (antes de montar os sistemas de arquivos). Se este for um dispositivo de longa duração, determine uma forma de desmontar e fsck em intervalos quando o sistema estiver ocioso.