Mercedes have dominated ahead of this weekend’s race in Sochi
Hamilton trailed Bottas by just 0.044 segundos, with his championship rival Max Verstappen only sixth for Red Bull.
The Dutch driver will be thrown to the back of the grid for Sunday’s race after taking on his fourth engine – one more than is permitted for the season.
Verstappen, who was already due to serve a three-place grid drop for taking Hamilton out of the last race in Monza, holds a five-point title advantage.
But his punishment, coupled with Mercedes’ impressive speed, hands the initiative to Hamilton, who is bidding here to claim his 100th career win and just his second from his last 11 appearances.
The omens are good for the seven-time world champion’s team, with Bottas and Hamilton first and second in both practice sessions around the venue for the 2014 Winter Olympic Games.
A Mercedes car has won every round staged at Sochi since the race was added to the calendar seven years ago, and the evidence of practice indicates they will be the team to beat once again.
Pierre Gasly finished two tenths back in his AlphaTauri, with Lando Norris fourth, half a second back.
The British driver, who recorded a career-best second at the last race in Italy, was back on track after he collided with the pit wall in the closing moments of the first running, sustaining minor damage to his McLaren.
Alpine’s Esteban Ocon finished fifth, one spot ahead of Verstappen, who finished a full second back.
The 23-year-old Dutchman was on the radio complaining about the lack of grunt in his Honda engine.
On a day of few incidents, the second running was temporarily suspended after Antonio Giovinazzi crashed out in his Alfa Romeo.
The Italian driver lost control of his machine through turn eight before slamming backwards into the tyre wall and suffering significant damage to the rear of his car.
His wrecked car was taken back to the pits as the tyre wall was repaired.