This is called a fleeting/mobile vowel which historically formed during the Fall or the Jers.
There are no strict rules but some patterns stand out:
- Nouns ending in -ец: конец, палец, боец - конца, пальца, бойца;
- Nouns ending in -ок/ёк: замок, зверёк, чаёк - замка, зверька, чайка;
- Nouns ending in -ей: муравей, воробей, улей - муравья, воробья, улья;
- A few odd ones: лев - льва, орёл - орла, мох - мха, вошь - вши, весь - всего, угол - угла.
Feminine and neuter nouns may get a fleeting vowel in genitive plural:
- consonant + ка: кошка - кошек, банка - банок, селёдка - селёдок, койка - коек;
- consonant + ня: вишня - вишен, башня - башен, деревня - деревень;
- consonant + ья: семья - семей, статья - статей, судья - судей;
- consonant + ьё: ружьё - ружей, копьё - копий;
- -йна: война - воен, тайна - таен;
- -сло: масло - масел, ремесло - ремёсел;
- Odd ones: яйцо - яиц, кукла - кукол, серьга - серёг, кочерга - кочерёг.
The general rules are:
- A fleeting vowel can only appear between two consonants (й being a consonant).
- A word has a fleeting vowel only if the ending is null or begins with a consonant: любовь (null) - любви (vowel) - любовью (consonant).
- If there is more than one consonant or щ to the left of a fleeting vowel, the fleeting vowel is kept in all forms: гонец - гонца, but беглец - беглеца.
Outside of these patterns telling if a a word has a fleeting vowel is difficult:
- ветер - ветра
- катер - катера
When in doubt, use a dictionary or this tool.